├── .browserslistrc ├── .editorconfig ├── .gitignore ├── .vscode ├── extensions.json ├── launch.json └── tasks.json ├── 5dd731efde7c10d561daac32cac85cc550b64879.gif ├── README.md ├── adminpage.gif ├── angular.json ├── karma.conf.js ├── kodlamaioBootcampProject.mp4 ├── package-lock.json ├── package.json ├── src ├── api │ └── db.json ├── app │ ├── app-routing.module.ts │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── component │ │ ├── admin │ │ │ ├── admin-page │ │ │ │ ├── admin-page.component.css │ │ │ │ ├── admin-page.component.html │ │ │ │ ├── admin-page.component.spec.ts │ │ │ │ └── admin-page.component.ts │ │ │ ├── admin-response-navbar │ │ │ │ └── responsivenavbar │ │ │ │ │ ├── responsivenavbar.component.css │ │ │ │ │ ├── responsivenavbar.component.html │ │ │ │ │ ├── responsivenavbar.component.spec.ts │ │ │ │ │ └── responsivenavbar.component.ts │ │ │ └── admin-sidebar │ │ │ │ └── admin-sidebar │ │ │ │ ├── admin-sidebar.component.css │ │ │ │ ├── admin-sidebar.component.html │ │ │ │ ├── admin-sidebar.component.spec.ts │ │ │ │ └── admin-sidebar.component.ts │ │ ├── applicant │ │ │ ├── applicant-add │ │ │ │ ├── applicant-add.component.css │ │ │ │ ├── applicant-add.component.html │ │ │ │ ├── applicant-add.component.spec.ts │ │ │ │ └── applicant-add.component.ts │ │ │ ├── applicant-detail │ │ │ │ ├── applicant-detail.component.css │ │ │ │ ├── applicant-detail.component.html │ │ │ │ ├── applicant-detail.component.spec.ts │ │ │ │ └── applicant-detail.component.ts │ │ │ ├── applicant-list │ │ │ │ ├── applicant-list.component.css │ │ │ │ ├── applicant-list.component.html │ │ │ │ ├── applicant-list.component.spec.ts │ │ │ │ └── applicant-list.component.ts │ │ │ ├── applicant-login │ │ │ │ ├── applicant-login.component.css │ │ │ │ ├── applicant-login.component.html │ │ │ │ ├── applicant-login.component.spec.ts │ │ │ │ └── applicant-login.component.ts │ │ │ └── applicant-update │ │ │ │ ├── applicant-update.component.css │ │ │ │ ├── applicant-update.component.html │ │ │ │ ├── applicant-update.component.spec.ts │ │ │ │ └── applicant-update.component.ts │ │ ├── application │ │ │ ├── application-add │ │ │ │ ├── application-add.component.css │ │ │ │ ├── application-add.component.html │ │ │ │ ├── application-add.component.spec.ts │ │ │ │ └── application-add.component.ts │ │ │ ├── application-detail │ │ │ │ ├── application-detail.component.css │ │ │ │ ├── application-detail.component.html │ │ │ │ ├── application-detail.component.spec.ts │ │ │ │ └── application-detail.component.ts │ │ │ ├── application-list │ │ │ │ ├── application-list.component.css │ │ │ │ ├── application-list.component.html │ │ │ │ ├── application-list.component.spec.ts │ │ │ │ └── application-list.component.ts │ │ │ └── application-update │ │ │ │ ├── application-update.component.css │ │ │ │ ├── application-update.component.html │ │ │ │ ├── application-update.component.spec.ts │ │ │ │ └── application-update.component.ts │ │ ├── blacklist │ │ │ ├── black-list │ │ │ │ ├── black-list.component.css │ │ │ │ ├── black-list.component.html │ │ │ │ ├── black-list.component.spec.ts │ │ │ │ ├── black-list.component.ts │ │ │ │ └── blacklist-detail │ │ │ │ │ ├── blacklist-detail.component.css │ │ │ │ │ ├── blacklist-detail.component.html │ │ │ │ │ ├── blacklist-detail.component.spec.ts │ │ │ │ │ └── blacklist-detail.component.ts │ │ │ ├── blacklist-add │ │ │ │ ├── blacklist-add.component.css │ │ │ │ ├── blacklist-add.component.html │ │ │ │ ├── blacklist-add.component.spec.ts │ │ │ │ └── blacklist-add.component.ts │ │ │ └── blacklist-update │ │ │ │ ├── blacklist-update.component.css │ │ │ │ ├── blacklist-update.component.html │ │ │ │ ├── blacklist-update.component.spec.ts │ │ │ │ └── blacklist-update.component.ts │ │ ├── bootcamp │ │ │ ├── bootcamp-add │ │ │ │ ├── bootcamp-add.component.css │ │ │ │ ├── bootcamp-add.component.html │ │ │ │ ├── bootcamp-add.component.spec.ts │ │ │ │ └── bootcamp-add.component.ts │ │ │ ├── bootcamp-detail │ │ │ │ ├── bootcamp-detail.component.css │ │ │ │ ├── bootcamp-detail.component.html │ │ │ │ ├── bootcamp-detail.component.spec.ts │ │ │ │ └── bootcamp-detail.component.ts │ │ │ ├── bootcamp-list │ │ │ │ ├── bootcamp-list.component.css │ │ │ │ ├── bootcamp-list.component.html │ │ │ │ ├── bootcamp-list.component.spec.ts │ │ │ │ └── bootcamp-list.component.ts │ │ │ └── bootcamp-update │ │ │ │ ├── bootcamp-update.component.css │ │ │ │ ├── bootcamp-update.component.html │ │ │ │ ├── bootcamp-update.component.spec.ts │ │ │ │ └── bootcamp-update.component.ts │ │ ├── employee │ │ │ ├── employe-list │ │ │ │ ├── employe-list.component.css │ │ │ │ ├── employe-list.component.html │ │ │ │ ├── employe-list.component.spec.ts │ │ │ │ └── employe-list.component.ts │ │ │ ├── employee-add │ │ │ │ ├── employee-add.component.css │ │ │ │ ├── employee-add.component.html │ │ │ │ ├── employee-add.component.spec.ts │ │ │ │ └── employee-add.component.ts │ │ │ ├── employee-detail │ │ │ │ ├── employee-detail.component.css │ │ │ │ ├── employee-detail.component.html │ │ │ │ ├── employee-detail.component.spec.ts │ │ │ │ └── employee-detail.component.ts │ │ │ ├── employee-login │ │ │ │ ├── employee-login.component.css │ │ │ │ ├── employee-login.component.html │ │ │ │ ├── employee-login.component.spec.ts │ │ │ │ └── employee-login.component.ts │ │ │ └── employee-update │ │ │ │ ├── employee-update.component.css │ │ │ │ ├── employee-update.component.html │ │ │ │ ├── employee-update.component.spec.ts │ │ │ │ └── employee-update.component.ts │ │ ├── home │ │ │ ├── home-about │ │ │ │ ├── home-about.component.css │ │ │ │ ├── home-about.component.html │ │ │ │ ├── home-about.component.spec.ts │ │ │ │ ├── home-about.component.ts │ │ │ │ └── img │ │ │ │ │ ├── team-1.jpg │ │ │ │ │ ├── team-2.jpg │ │ │ │ │ └── team-3.jpg │ │ │ ├── home-bootcamp-detail │ │ │ │ └── home-bootcamp-detail │ │ │ │ │ ├── home-bootcamp-detail.component.css │ │ │ │ │ ├── home-bootcamp-detail.component.html │ │ │ │ │ ├── home-bootcamp-detail.component.spec.ts │ │ │ │ │ └── home-bootcamp-detail.component.ts │ │ │ ├── home-bootcamp-list │ │ │ │ ├── home-bootcamp-list.component.css │ │ │ │ ├── home-bootcamp-list.component.html │ │ │ │ ├── home-bootcamp-list.component.spec.ts │ │ │ │ └── home-bootcamp-list.component.ts │ │ │ ├── home-contact │ │ │ │ ├── home-contact.component.css │ │ │ │ ├── home-contact.component.html │ │ │ │ ├── home-contact.component.spec.ts │ │ │ │ └── home-contact.component.ts │ │ │ ├── home-footer │ │ │ │ ├── home-footer.component.css │ │ │ │ ├── home-footer.component.html │ │ │ │ ├── home-footer.component.spec.ts │ │ │ │ └── home-footer.component.ts │ │ │ ├── home-instructor-list │ │ │ │ ├── home-instructor-list.component.css │ │ │ │ ├── home-instructor-list.component.html │ │ │ │ ├── home-instructor-list.component.spec.ts │ │ │ │ └── home-instructor-list.component.ts │ │ │ └── home-page │ │ │ │ ├── home-page.component.css │ │ │ │ ├── home-page.component.html │ │ │ │ ├── home-page.component.spec.ts │ │ │ │ └── home-page.component.ts │ │ ├── instructor │ │ │ ├── instructor-add │ │ │ │ ├── instructor-add.component.css │ │ │ │ ├── instructor-add.component.html │ │ │ │ ├── instructor-add.component.spec.ts │ │ │ │ └── instructor-add.component.ts │ │ │ ├── instructor-detail │ │ │ │ ├── instructor-detail.component.css │ │ │ │ ├── instructor-detail.component.html │ │ │ │ ├── instructor-detail.component.spec.ts │ │ │ │ └── instructor-detail.component.ts │ │ │ ├── instructor-list │ │ │ │ ├── instructor-list.component.css │ │ │ │ ├── instructor-list.component.html │ │ │ │ ├── instructor-list.component.spec.ts │ │ │ │ └── instructor-list.component.ts │ │ │ ├── instructor-login │ │ │ │ ├── instructor-login.component.css │ │ │ │ ├── instructor-login.component.html │ │ │ │ ├── instructor-login.component.spec.ts │ │ │ │ └── instructor-login.component.ts │ │ │ └── instructor-update │ │ │ │ ├── instructor-update.component.css │ │ │ │ ├── instructor-update.component.html │ │ │ │ ├── instructor-update.component.spec.ts │ │ │ │ └── instructor-update.component.ts │ │ ├── navi │ │ │ ├── navi.component.css │ │ │ ├── navi.component.html │ │ │ ├── navi.component.spec.ts │ │ │ └── navi.component.ts │ │ ├── register │ │ │ ├── register.component.css │ │ │ ├── register.component.html │ │ │ ├── register.component.spec.ts │ │ │ └── register.component.ts │ │ ├── userApplicant │ │ │ ├── applicant-bootcamp │ │ │ │ ├── applicant-bootcamp.component.css │ │ │ │ ├── applicant-bootcamp.component.html │ │ │ │ ├── applicant-bootcamp.component.spec.ts │ │ │ │ └── applicant-bootcamp.component.ts │ │ │ ├── applicant-notification │ │ │ │ ├── applicant-notification.component.css │ │ │ │ ├── applicant-notification.component.html │ │ │ │ ├── applicant-notification.component.spec.ts │ │ │ │ └── applicant-notification.component.ts │ │ │ └── applicant-page │ │ │ │ ├── applicant-page.component.css │ │ │ │ ├── applicant-page.component.html │ │ │ │ ├── applicant-page.component.spec.ts │ │ │ │ └── applicant-page.component.ts │ │ └── userInstructor │ │ │ ├── instructor-applicant │ │ │ ├── instructor-applicant.component.css │ │ │ ├── instructor-applicant.component.html │ │ │ ├── instructor-applicant.component.spec.ts │ │ │ └── instructor-applicant.component.ts │ │ │ ├── instructor-bootcamp │ │ │ ├── instructor-bootcamp.component.css │ │ │ ├── instructor-bootcamp.component.html │ │ │ ├── instructor-bootcamp.component.spec.ts │ │ │ └── instructor-bootcamp.component.ts │ │ │ └── instructor-page │ │ │ ├── instructor-page.component.css │ │ │ ├── instructor-page.component.html │ │ │ ├── instructor-page.component.spec.ts │ │ │ └── instructor-page.component.ts │ ├── guards │ │ ├── applicantGuard │ │ │ ├── login-applicant.guard.spec.ts │ │ │ └── login-applicant.guard.ts │ │ ├── instructorGuard │ │ │ ├── login-instructor.guard.spec.ts │ │ │ └── login-instructor.guard.ts │ │ ├── login-employe.guard.spec.ts │ │ └── login-employe.guard.ts │ ├── interceptors │ │ └── login-employee.ts │ ├── models │ │ ├── request │ │ │ ├── applicant │ │ │ │ ├── createApplicantRequest.ts │ │ │ │ └── updateApplicantRequest.ts │ │ │ ├── application │ │ │ │ ├── createApplicationRequest.ts │ │ │ │ └── updateApplicationRequest.ts │ │ │ ├── blackList │ │ │ │ ├── createBlackListRequest.ts │ │ │ │ └── updateBlackListRequest.ts │ │ │ ├── bootcamp │ │ │ │ ├── createBootcampRequest.ts │ │ │ │ └── updateBootcampRequest.ts │ │ │ ├── employee │ │ │ │ ├── createEmployeeRequest.ts │ │ │ │ └── updateEmployeeRequest.ts │ │ │ └── instructor │ │ │ │ ├── createInstructorRequest.ts │ │ │ │ └── updateInstructorRequest.ts │ │ ├── response │ │ │ ├── applicant │ │ │ │ ├── getAllApplicantResponse.ts │ │ │ │ └── getApplicantResponse.ts │ │ │ ├── application │ │ │ │ ├── getAllApplicationResponse.ts │ │ │ │ └── getApplicationResponse.ts │ │ │ ├── blackList │ │ │ │ ├── getAllBlackListResponse.ts │ │ │ │ └── getBlackListResponse.ts │ │ │ ├── bootcamp │ │ │ │ ├── getAllBootcampResponse.ts │ │ │ │ └── getBootcampResponse.ts │ │ │ ├── employee │ │ │ │ ├── getAllEmployeeResponse.ts │ │ │ │ └── getEmployeeResponse.ts │ │ │ └── instructor │ │ │ │ ├── getAllInstructorResponse.ts │ │ │ │ └── getInstructorResponse.ts │ │ └── token │ │ │ ├── login-applicant.ts │ │ │ ├── login-employee.ts │ │ │ ├── login-instructor.ts │ │ │ ├── tokenModel.ts │ │ │ └── users-model.ts │ ├── pages │ │ ├── admin │ │ │ ├── admin.component.css │ │ │ ├── admin.component.html │ │ │ ├── admin.component.spec.ts │ │ │ └── admin.component.ts │ │ ├── applicant │ │ │ ├── applicant.component.css │ │ │ ├── applicant.component.html │ │ │ ├── applicant.component.spec.ts │ │ │ └── applicant.component.ts │ │ ├── home │ │ │ ├── home.component.css │ │ │ ├── home.component.html │ │ │ ├── home.component.spec.ts │ │ │ └── home.component.ts │ │ └── instructor │ │ │ ├── instructor.component.css │ │ │ ├── instructor.component.html │ │ │ ├── instructor.component.spec.ts │ │ │ └── instructor.component.ts │ ├── pipes │ │ ├── applicantfilter.pipe.ts │ │ ├── applicationfilter.pipe.ts │ │ ├── blacklistfilter.pipe.ts │ │ ├── bootcampfilter.pipe.ts │ │ ├── employeefilter.pipe.ts │ │ └── instructorfilter.pipe.ts │ └── services │ │ ├── applicant │ │ ├── applicant.service.spec.ts │ │ └── applicant.service.ts │ │ ├── application │ │ ├── application.service.spec.ts │ │ └── application.service.ts │ │ ├── blacklist │ │ ├── blacklist.service.spec.ts │ │ └── blacklist.service.ts │ │ ├── bootcamp │ │ ├── bootcamp.service.spec.ts │ │ └── bootcamp.service.ts │ │ ├── employee │ │ ├── employee.service.spec.ts │ │ └── employee.service.ts │ │ ├── instructor │ │ ├── instructor.service.spec.ts │ │ └── instructor.service.ts │ │ ├── login-applicant │ │ ├── login-applicant.service.spec.ts │ │ └── login-applicant.service.ts │ │ ├── login-employee │ │ ├── login-employee.service.spec.ts │ │ └── login-employee.service.ts │ │ ├── login-instructor │ │ ├── login-instructor.service.spec.ts │ │ └── login-instructor.service.ts │ │ └── register │ │ ├── register.service.spec.ts │ │ └── register.service.ts ├── assets │ └── .gitkeep ├── environments │ ├── environment.prod.ts │ └── environment.ts ├── favicon.ico ├── index.html ├── main.ts ├── polyfills.ts ├── styles.css ├── template │ ├── 404.html │ ├── LICENSE.txt │ ├── READ-ME.txt │ ├── blank.html │ ├── bootstrap-admin-template-free.jpg │ ├── button.html │ ├── chart.html │ ├── css │ │ ├── adminstyle.css │ │ └── bootstrap.min.css │ ├── element.html │ ├── form.html │ ├── img │ │ ├── testimonial-1.jpg │ │ ├── testimonial-2.jpg │ │ └── user.jpg │ ├── index.html │ ├── js │ │ └── main.js │ ├── lib │ │ ├── chart │ │ │ └── chart.min.js │ │ ├── easing │ │ │ ├── easing.js │ │ │ └── easing.min.js │ │ ├── owlcarousel │ │ │ ├── LICENSE │ │ │ ├── assets │ │ │ │ ├── ajax-loader.gif │ │ │ │ ├── owl.carousel.css │ │ │ │ ├── owl.carousel.min.css │ │ │ │ ├── owl.theme.default.css │ │ │ │ ├── owl.theme.default.min.css │ │ │ │ ├── owl.theme.green.css │ │ │ │ ├── owl.theme.green.min.css │ │ │ │ └── owl.video.play.png │ │ │ ├── owl.carousel.js │ │ │ └── owl.carousel.min.js │ │ ├── tempusdominus │ │ │ ├── css │ │ │ │ ├── tempusdominus-bootstrap-4.css │ │ │ │ └── tempusdominus-bootstrap-4.min.css │ │ │ └── js │ │ │ │ ├── moment-timezone.min.js │ │ │ │ ├── moment.min.js │ │ │ │ ├── tempusdominus-bootstrap-4.js │ │ │ │ └── tempusdominus-bootstrap-4.min.js │ │ └── waypoints │ │ │ ├── links.php │ │ │ └── waypoints.min.js │ ├── scss │ │ ├── bootstrap.scss │ │ └── bootstrap │ │ │ └── scss │ │ │ ├── _accordion.scss │ │ │ ├── _alert.scss │ │ │ ├── _badge.scss │ │ │ ├── _breadcrumb.scss │ │ │ ├── _button-group.scss │ │ │ ├── _buttons.scss │ │ │ ├── _card.scss │ │ │ ├── _carousel.scss │ │ │ ├── _close.scss │ │ │ ├── _containers.scss │ │ │ ├── _dropdown.scss │ │ │ ├── _forms.scss │ │ │ ├── _functions.scss │ │ │ ├── _grid.scss │ │ │ ├── _helpers.scss │ │ │ ├── _images.scss │ │ │ ├── _list-group.scss │ │ │ ├── _mixins.scss │ │ │ ├── _modal.scss │ │ │ ├── _nav.scss │ │ │ ├── _navbar.scss │ │ │ ├── _offcanvas.scss │ │ │ ├── _pagination.scss │ │ │ ├── _popover.scss │ │ │ ├── _progress.scss │ │ │ ├── _reboot.scss │ │ │ ├── _root.scss │ │ │ ├── _spinners.scss │ │ │ ├── _tables.scss │ │ │ ├── _toasts.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _transitions.scss │ │ │ ├── _type.scss │ │ │ ├── _utilities.scss │ │ │ ├── _variables.scss │ │ │ ├── bootstrap-grid.scss │ │ │ ├── bootstrap-reboot.scss │ │ │ ├── bootstrap-utilities.scss │ │ │ ├── bootstrap.scss │ │ │ ├── forms │ │ │ ├── _floating-labels.scss │ │ │ ├── _form-check.scss │ │ │ ├── _form-control.scss │ │ │ ├── _form-range.scss │ │ │ ├── _form-select.scss │ │ │ ├── _form-text.scss │ │ │ ├── _input-group.scss │ │ │ ├── _labels.scss │ │ │ └── _validation.scss │ │ │ ├── helpers │ │ │ ├── _clearfix.scss │ │ │ ├── _colored-links.scss │ │ │ ├── _position.scss │ │ │ ├── _ratio.scss │ │ │ ├── _stretched-link.scss │ │ │ ├── _text-truncation.scss │ │ │ └── _visually-hidden.scss │ │ │ ├── mixins │ │ │ ├── _alert.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-shadow.scss │ │ │ ├── _breakpoints.scss │ │ │ ├── _buttons.scss │ │ │ ├── _caret.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _color-scheme.scss │ │ │ ├── _container.scss │ │ │ ├── _deprecate.scss │ │ │ ├── _forms.scss │ │ │ ├── _gradients.scss │ │ │ ├── _grid.scss │ │ │ ├── _image.scss │ │ │ ├── _list-group.scss │ │ │ ├── _lists.scss │ │ │ ├── _pagination.scss │ │ │ ├── _reset-text.scss │ │ │ ├── _resize.scss │ │ │ ├── _table-variants.scss │ │ │ ├── _text-truncate.scss │ │ │ ├── _transition.scss │ │ │ ├── _utilities.scss │ │ │ └── _visually-hidden.scss │ │ │ ├── utilities │ │ │ └── _api.scss │ │ │ └── vendor │ │ │ └── _rfs.scss │ ├── sd │ │ └── carousel.js │ ├── signin.html │ ├── signup.html │ ├── table.html │ ├── typography.html │ └── widget.html └── test.ts ├── tsconfig.app.json ├── tsconfig.json └── tsconfig.spec.json /.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major versions 15 | last 2 iOS major versions 16 | Firefox ESR 17 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # Compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | /bazel-out 8 | 9 | # Node 10 | /node_modules 11 | npm-debug.log 12 | yarn-error.log 13 | 14 | # IDEs and editors 15 | .idea/ 16 | .project 17 | .classpath 18 | .c9/ 19 | *.launch 20 | .settings/ 21 | *.sublime-workspace 22 | 23 | # Visual Studio Code 24 | .vscode/* 25 | !.vscode/settings.json 26 | !.vscode/tasks.json 27 | !.vscode/launch.json 28 | !.vscode/extensions.json 29 | .history/* 30 | 31 | # Miscellaneous 32 | /.angular/cache 33 | .sass-cache/ 34 | /connect.lock 35 | /coverage 36 | /libpeerconnection.log 37 | testem.log 38 | /typings 39 | 40 | # System files 41 | .DS_Store 42 | Thumbs.db 43 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 3 | "recommendations": ["angular.ng-template"] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 3 | "version": "0.2.0", 4 | "configurations": [ 5 | { 6 | "name": "ng serve", 7 | "type": "pwa-chrome", 8 | "request": "launch", 9 | "preLaunchTask": "npm: start", 10 | "url": "http://localhost:4200/" 11 | }, 12 | { 13 | "name": "ng test", 14 | "type": "chrome", 15 | "request": "launch", 16 | "preLaunchTask": "npm: test", 17 | "url": "http://localhost:9876/debug.html" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "type": "npm", 7 | "script": "start", 8 | "isBackground": true, 9 | "problemMatcher": { 10 | "owner": "typescript", 11 | "pattern": "$tsc", 12 | "background": { 13 | "activeOnStart": true, 14 | "beginsPattern": { 15 | "regexp": "(.*?)" 16 | }, 17 | "endsPattern": { 18 | "regexp": "bundle generation complete" 19 | } 20 | } 21 | } 22 | }, 23 | { 24 | "type": "npm", 25 | "script": "test", 26 | "isBackground": true, 27 | "problemMatcher": { 28 | "owner": "typescript", 29 | "pattern": "$tsc", 30 | "background": { 31 | "activeOnStart": true, 32 | "beginsPattern": { 33 | "regexp": "(.*?)" 34 | }, 35 | "endsPattern": { 36 | "regexp": "bundle generation complete" 37 | } 38 | } 39 | } 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /5dd731efde7c10d561daac32cac85cc550b64879.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/5dd731efde7c10d561daac32cac85cc550b64879.gif -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # kodlamaioBootcampProject 2 | Çalışma ve Sosyal Güvenlik Eğitim Araştırma Merkezi bünyesinde yapılan Frontend Bootcamp programına eğitmenlik yapan Engin DEMİROĞ hocamızın bizden istediği bitirme projesi olarak kodlamaioBootcampProject projesini hayata geçirdik. Bu proje Angular ile ilk projemizdir. 3 | 4 | ## Proje Geliştiricileri 5 | Hasan Said SERTKAYA - Uğur MEYDANLI - Enes KARACA - Seyfettin TURAN 6 | 7 | ## Proje Hakkında 8 | Senaryo: kodlamaio isimli şirket bootcamp eğitimleri düzenlemektedir. Bunun üzerine bizden yöneticilerin, eğitmenlerin ve bootcamplere başvurabilen adayların olduğu aynı zamanda yöneticilerin tüm verileri güncelleyebilmesi, silebilmesi ve yeni veri ekleyebilmesi istemiştir. Eğitmenlerin kendi bootcamplerini yönetebileceği, adayların ise bootcamplere başvurabileceği özel bir sayfa ve başvurularını yönetebileceği sayfa olacaktır. 9 | 10 | ## Kullanılan Teknolojiler 11 | Angular - TypeScript - JavaScript - HTML - Css - Bootstrap 5 12 | 13 | ## Anasayfa 14 | 15 | ![anasayfa](https://github.com/hasansaid/kodlamaioBootcampProject/blob/master/5dd731efde7c10d561daac32cac85cc550b64879.gif) 16 | 17 | ## Admin Sayfası 18 | 19 | ![adminsayfası](https://github.com/hasansaid/kodlamaioBootcampProject/blob/master/adminpage.gif) 20 | 21 | 22 | -------------------------------------------------------------------------------- /adminpage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/adminpage.gif -------------------------------------------------------------------------------- /karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | jasmine: { 17 | // you can add configuration options for Jasmine here 18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html 19 | // for example, you can disable the random execution with `random: false` 20 | // or set a specific seed with `seed: 4321` 21 | }, 22 | clearContext: false // leave Jasmine Spec Runner output visible in browser 23 | }, 24 | jasmineHtmlReporter: { 25 | suppressAll: true // removes the duplicated traces 26 | }, 27 | coverageReporter: { 28 | dir: require('path').join(__dirname, './coverage/kodlamaio-bootcamp-project'), 29 | subdir: '.', 30 | reporters: [ 31 | { type: 'html' }, 32 | { type: 'text-summary' } 33 | ] 34 | }, 35 | reporters: ['progress', 'kjhtml'], 36 | port: 9876, 37 | colors: true, 38 | logLevel: config.LOG_INFO, 39 | autoWatch: true, 40 | browsers: ['Chrome'], 41 | singleRun: false, 42 | restartOnFileChange: true 43 | }); 44 | }; 45 | -------------------------------------------------------------------------------- /kodlamaioBootcampProject.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/kodlamaioBootcampProject.mp4 -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "kodlamaio-bootcamp-project", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "ng": "ng", 6 | "start": "ng serve", 7 | "build": "ng build", 8 | "watch": "ng build --watch --configuration development", 9 | "test": "ng test" 10 | }, 11 | "private": true, 12 | "dependencies": { 13 | "@angular/animations": "^14.2.12", 14 | "@angular/common": "^14.2.0", 15 | "@angular/compiler": "^14.2.0", 16 | "@angular/core": "^14.2.0", 17 | "@angular/forms": "^14.2.0", 18 | "@angular/platform-browser": "^14.2.0", 19 | "@angular/platform-browser-dynamic": "^14.2.0", 20 | "@angular/router": "^14.2.0", 21 | "@popperjs/core": "^2.11.6", 22 | "bootstrap": "^5.2.3", 23 | "jquery": "^3.6.1", 24 | "ngx-bootstrap": "^9.0.0", 25 | "ngx-toastr": "^15.2.2", 26 | "router": "^1.3.7", 27 | "rxjs": "~7.5.0", 28 | "sweetalert2": "^11.6.15", 29 | "tslib": "^2.3.0", 30 | "zone.js": "~0.11.4" 31 | }, 32 | "devDependencies": { 33 | "@angular-devkit/build-angular": "^14.2.9", 34 | "@angular/cli": "~14.2.9", 35 | "@angular/compiler-cli": "^14.2.0", 36 | "@types/jasmine": "~4.0.0", 37 | "jasmine-core": "~4.3.0", 38 | "karma": "~6.4.0", 39 | "karma-chrome-launcher": "~3.1.0", 40 | "karma-coverage": "~2.2.0", 41 | "karma-jasmine": "~5.1.0", 42 | "karma-jasmine-html-reporter": "~2.0.0", 43 | "typescript": "~4.7.2" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/app/app.component.css: -------------------------------------------------------------------------------- 1 | * { 2 | overflow: hidden; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/app.component.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async () => { 7 | await TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | }); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'kodlamaioBootcampProject'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('kodlamaioBootcampProject'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement as HTMLElement; 33 | expect(compiled.querySelector('.content span')?.textContent).toContain('kodlamaioBootcampProject app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'kodlamaioBootcampProject'; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-page/admin-page.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminPageComponent } from './admin-page.component'; 4 | 5 | describe('AdminPageComponent', () => { 6 | let component: AdminPageComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ AdminPageComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(AdminPageComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-response-navbar/responsivenavbar/responsivenavbar.component.css: -------------------------------------------------------------------------------- 1 | .responsive { 2 | display: none; 3 | } 4 | @media (max-width: 450px) { 5 | .responsive { 6 | display: flex; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-response-navbar/responsivenavbar/responsivenavbar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ResponsivenavbarComponent } from './responsivenavbar.component'; 4 | 5 | describe('ResponsivenavbarComponent', () => { 6 | let component: ResponsivenavbarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ResponsivenavbarComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ResponsivenavbarComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-response-navbar/responsivenavbar/responsivenavbar.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginEmployeeService } from './../../../../services/login-employee/login-employee.service'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { Router } from '@angular/router'; 4 | 5 | @Component({ 6 | selector: 'app-responsivenavbar', 7 | templateUrl: './responsivenavbar.component.html', 8 | styleUrls: ['./responsivenavbar.component.css'], 9 | }) 10 | export class ResponsivenavbarComponent implements OnInit { 11 | constructor( 12 | private loginEmployeeService: LoginEmployeeService, 13 | private router: Router 14 | ) {} 15 | 16 | ngOnInit(): void {} 17 | logout() { 18 | this.loginEmployeeService.logout(); 19 | this.router.navigate(['']); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-sidebar/admin-sidebar/admin-sidebar.component.css: -------------------------------------------------------------------------------- 1 | * { 2 | overflow: hidden; 3 | } 4 | @media (max-width: 700px) { 5 | .asd { 6 | width: 200px; 7 | } 8 | } 9 | @media (max-width: 450px) { 10 | .asd { 11 | display: none; 12 | } 13 | } 14 | @media (max-width: 828px) { 15 | .asd { 16 | height: 90% !important; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-sidebar/admin-sidebar/admin-sidebar.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminSidebarComponent } from './admin-sidebar.component'; 4 | 5 | describe('AdminSidebarComponent', () => { 6 | let component: AdminSidebarComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ AdminSidebarComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(AdminSidebarComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/admin/admin-sidebar/admin-sidebar/admin-sidebar.component.ts: -------------------------------------------------------------------------------- 1 | import { Router } from '@angular/router'; 2 | import { LoginEmployeeService } from './../../../../services/login-employee/login-employee.service'; 3 | import { Component, OnInit } from '@angular/core'; 4 | 5 | @Component({ 6 | selector: 'app-admin-sidebar', 7 | templateUrl: './admin-sidebar.component.html', 8 | styleUrls: ['./admin-sidebar.component.css'], 9 | }) 10 | export class AdminSidebarComponent implements OnInit { 11 | name = localStorage.getItem('name') + ' ' + localStorage.getItem('lastName'); 12 | image = localStorage.getItem('image'); 13 | constructor( 14 | private loginEmployeeService: LoginEmployeeService, 15 | private router: Router 16 | ) {} 17 | 18 | ngOnInit(): void {} 19 | logout() { 20 | this.loginEmployeeService.logout(); 21 | this.router.navigate(['']); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-add/applicant-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantAddComponent } from './applicant-add.component'; 4 | 5 | describe('ApplicantAddComponent', () => { 6 | let component: ApplicantAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-add/applicant-add.component.ts: -------------------------------------------------------------------------------- 1 | import { ApplicantService } from './../../../services/applicant/applicant.service'; 2 | import { ActivatedRoute, Router } from '@angular/router'; 3 | import { Component, OnInit } from '@angular/core'; 4 | import { ToastrService } from 'ngx-toastr'; 5 | import { 6 | FormBuilder, 7 | FormGroup, 8 | Validators, 9 | FormControl, 10 | } from '@angular/forms'; 11 | 12 | @Component({ 13 | selector: 'app-applicant-add', 14 | templateUrl: './applicant-add.component.html', 15 | styleUrls: ['./applicant-add.component.css'], 16 | }) 17 | export class ApplicantAddComponent implements OnInit { 18 | applicantForm: FormGroup; 19 | constructor( 20 | private formBuilder: FormBuilder, 21 | private activatedRoute: ActivatedRoute, 22 | private applicantService: ApplicantService, 23 | private toastrService: ToastrService, 24 | private router: Router 25 | ) {} 26 | 27 | ngOnInit(): void { 28 | this.createApplicationForm(); 29 | } 30 | 31 | createApplicationForm() { 32 | this.applicantForm = this.formBuilder.group({ 33 | firstName: ['', Validators.required], 34 | lastName: ['', Validators.required], 35 | email: ['', Validators.required], 36 | password: ['', Validators.required], 37 | nationalIdentity: ['', Validators.required], 38 | dateOfBirth: ['', Validators.required], 39 | about: ['', Validators.required], 40 | image: ['', Validators.required], 41 | state: [1], 42 | }); 43 | } 44 | 45 | add() { 46 | if (this.applicantForm.valid) { 47 | let applicantModel = Object.assign({}, this.applicantForm.value); 48 | this.applicantService.addApplicant(applicantModel).subscribe((data) => { 49 | this.toastrService.success('Aday Ekleme Başarılı'); 50 | this.router.navigate(['/admin/admin-applicant']); 51 | }); 52 | } else { 53 | this.toastrService.warning('Form Eksik!!!'); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-detail/applicant-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantDetailComponent } from './applicant-detail.component'; 4 | 5 | describe('ApplicantDetailComponent', () => { 6 | let component: ApplicantDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-detail/applicant-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginEmployeeService } from './../../../services/login-employee/login-employee.service'; 2 | import { IGetApplicantResponse } from './../../../models/response/applicant/getApplicantResponse'; 3 | import { ActivatedRoute, Router } from '@angular/router'; 4 | import { IGetAllApplicantResponse } from './../../../models/response/applicant/getAllApplicantResponse'; 5 | import { ApplicantService } from './../../../services/applicant/applicant.service'; 6 | import { Component, OnInit } from '@angular/core'; 7 | 8 | @Component({ 9 | selector: 'app-applicant-detail', 10 | templateUrl: './applicant-detail.component.html', 11 | styleUrls: ['./applicant-detail.component.css'], 12 | }) 13 | export class ApplicantDetailComponent implements OnInit { 14 | applicant: IGetApplicantResponse; 15 | constructor( 16 | private applicantService: ApplicantService, 17 | private activatedRoute: ActivatedRoute 18 | ) {} 19 | 20 | ngOnInit(): void { 21 | this.activatedRoute.params.subscribe((params) => 22 | this.getApplicant(params['id']) 23 | ); 24 | } 25 | 26 | getApplicant(id: number) { 27 | this.applicantService 28 | .getApplicant(id) 29 | .subscribe((data) => (this.applicant = data)); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-list/applicant-list.component.css: -------------------------------------------------------------------------------- 1 | @media (max-width: 828px) { 2 | .responsiveTable { 3 | font-size: 12px; 4 | width: 100% !important; 5 | padding: 0 !important; 6 | margin-left: 140px !important; 7 | } 8 | button { 9 | padding: 0 !important; 10 | font-size: 12px; 11 | } 12 | table, 13 | tr, 14 | td { 15 | padding: 0 !important; 16 | margin: 0 !important; 17 | } 18 | } 19 | @media (max-width: 450px) { 20 | .responsiveTable { 21 | margin: 0 !important; 22 | font-size: 12px; 23 | margin-top: 50px !important; 24 | width: 100% !important; 25 | padding: 0 !important; 26 | } 27 | #res { 28 | display: none; 29 | } 30 | table, 31 | button { 32 | padding: 0 !important; 33 | font-size: 12px; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-list/applicant-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantListComponent } from './applicant-list.component'; 4 | 5 | describe('ApplicantListComponent', () => { 6 | let component: ApplicantListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-login/applicant-login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantLoginComponent } from './applicant-login.component'; 4 | 5 | describe('ApplicantLoginComponent', () => { 6 | let component: ApplicantLoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantLoginComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantLoginComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-login/applicant-login.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginApplicantModel } from './../../../models/token/login-applicant'; 2 | import { LoginEmployeeModel } from './../../../models/token/login-employee'; 3 | import { Router } from '@angular/router'; 4 | import { LoginApplicantService } from './../../../services/login-applicant/login-applicant.service'; 5 | import { ITokenModel } from './../../../models/token/tokenModel'; 6 | import { Component, OnInit } from '@angular/core'; 7 | import { FormBuilder, FormGroup, Validators } from '@angular/forms'; 8 | 9 | @Component({ 10 | selector: 'app-applicant-login', 11 | templateUrl: './applicant-login.component.html', 12 | styleUrls: ['./applicant-login.component.css'], 13 | }) 14 | export class ApplicantLoginComponent implements OnInit { 15 | loginApplicantForm: FormGroup; 16 | tokenModel: ITokenModel; 17 | 18 | constructor( 19 | private loginApplicantService: LoginApplicantService, 20 | private formBuilder: FormBuilder, 21 | private router: Router 22 | ) {} 23 | 24 | ngOnInit(): void { 25 | this.createLoginApplicantForm(); 26 | } 27 | 28 | createLoginApplicantForm() { 29 | this.loginApplicantForm = this.formBuilder.group({ 30 | email: ['', Validators.required], 31 | password: ['', Validators.required], 32 | }); 33 | } 34 | 35 | loginApplicant() { 36 | if (this.loginApplicantForm.valid) { 37 | let loginModel: LoginApplicantModel = this.loginApplicantForm.value; 38 | this.loginApplicantService 39 | .loginApplicant(loginModel) 40 | .subscribe((data) => { 41 | if (data.length > 0) { 42 | this.tokenModel = data[0]; 43 | localStorage.setItem('token', this.tokenModel.token); 44 | this.router.navigate(['applicant']); 45 | alert('Giriş Başarılı Yönlendiriliyorsunuz.'); 46 | } else { 47 | alert('Giriş Başarısız Tekrar Deneyiniz'); 48 | } 49 | }); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/app/component/applicant/applicant-update/applicant-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantUpdateComponent } from './applicant-update.component'; 4 | 5 | describe('ApplicantUpdateComponent', () => { 6 | let component: ApplicantUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/application/application-add/application-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicationAddComponent } from './application-add.component'; 4 | 5 | describe('ApplicationAddComponent', () => { 6 | let component: ApplicationAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicationAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicationAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/application/application-detail/application-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicationDetailComponent } from './application-detail.component'; 4 | 5 | describe('ApplicationDetailComponent', () => { 6 | let component: ApplicationDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicationDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicationDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/application/application-detail/application-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { IGetApplicationResponse } from './../../../models/response/application/getApplicationResponse'; 2 | import { ActivatedRoute } from '@angular/router'; 3 | import { ApplicationService } from './../../../services/application/application.service'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-application-detail', 8 | templateUrl: './application-detail.component.html', 9 | styleUrls: ['./application-detail.component.css'], 10 | }) 11 | export class ApplicationDetailComponent implements OnInit { 12 | application: IGetApplicationResponse; 13 | constructor( 14 | private applicationService: ApplicationService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.activatedRoute.params.subscribe((params) => 20 | this.getApplication(params['id']) 21 | ); 22 | } 23 | 24 | getApplication(id: number) { 25 | this.applicationService 26 | .getApplication(id) 27 | .subscribe((data) => (this.application = data)); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/component/application/application-list/application-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/application/application-list/application-list.component.css -------------------------------------------------------------------------------- /src/app/component/application/application-list/application-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicationListComponent } from './application-list.component'; 4 | 5 | describe('ApplicationListComponent', () => { 6 | let component: ApplicationListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicationListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicationListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/application/application-update/application-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicationUpdateComponent } from './application-update.component'; 4 | 5 | describe('ApplicationUpdateComponent', () => { 6 | let component: ApplicationUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicationUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicationUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/blacklist/black-list/black-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/blacklist/black-list/black-list.component.css -------------------------------------------------------------------------------- /src/app/component/blacklist/black-list/black-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BlackListComponent } from './black-list.component'; 4 | 5 | describe('BlackListComponent', () => { 6 | let component: BlackListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BlackListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BlackListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/blacklist/black-list/blacklist-detail/blacklist-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BlacklistDetailComponent } from './blacklist-detail.component'; 4 | 5 | describe('BlacklistDetailComponent', () => { 6 | let component: BlacklistDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BlacklistDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BlacklistDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/blacklist/black-list/blacklist-detail/blacklist-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { IGetBlackListResponse } from './../../../../models/response/blackList/getBlackListResponse'; 3 | import { BlacklistService } from './../../../../services/blacklist/blacklist.service'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-blacklist-detail', 8 | templateUrl: './blacklist-detail.component.html', 9 | styleUrls: ['./blacklist-detail.component.css'], 10 | }) 11 | export class BlacklistDetailComponent implements OnInit { 12 | blacklist: IGetBlackListResponse; 13 | constructor( 14 | private blacklistService: BlacklistService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.activatedRoute.params.subscribe((params) => 20 | this.getBlackList(params['id']) 21 | ); 22 | } 23 | 24 | getBlackList(id: number) { 25 | this.blacklistService 26 | .getBlackList(id) 27 | .subscribe((data) => (this.blacklist = data)); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/component/blacklist/blacklist-add/blacklist-add.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Kara Listeye Ekle 8 | 9 | 10 | 11 |
17 |

Kara Listeye Ekle

18 | 19 |
20 | 21 |
22 |
23 | 24 | 30 |
31 | 32 |
33 |
34 | 41 |
42 |
43 | 46 |
47 |
48 |
49 | 50 | 51 | 52 | 60 | -------------------------------------------------------------------------------- /src/app/component/blacklist/blacklist-add/blacklist-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BlacklistAddComponent } from './blacklist-add.component'; 4 | 5 | describe('BlacklistAddComponent', () => { 6 | let component: BlacklistAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BlacklistAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BlacklistAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/blacklist/blacklist-update/blacklist-update.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Kara Liste Güncelle 8 | 9 | 10 | 11 |
17 |

Kara Liste

18 | 19 |
20 | 21 | 22 |
23 |
24 | 25 | 31 |
32 |
33 | 34 | 35 |
36 | 37 |
38 |
39 | 46 |
47 |
48 | 56 |
57 |
58 |
59 | 60 | 61 | -------------------------------------------------------------------------------- /src/app/component/blacklist/blacklist-update/blacklist-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BlacklistUpdateComponent } from './blacklist-update.component'; 4 | 5 | describe('BlacklistUpdateComponent', () => { 6 | let component: BlacklistUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BlacklistUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BlacklistUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-add/bootcamp-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BootcampAddComponent } from './bootcamp-add.component'; 4 | 5 | describe('BootcampAddComponent', () => { 6 | let component: BootcampAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BootcampAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BootcampAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-detail/bootcamp-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BootcampDetailComponent } from './bootcamp-detail.component'; 4 | 5 | describe('BootcampDetailComponent', () => { 6 | let component: BootcampDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BootcampDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BootcampDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-detail/bootcamp-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { IGetBootcampResponse } from './../../../models/response/bootcamp/getBootcampResponse'; 3 | import { BootcampService } from './../../../services/bootcamp/bootcamp.service'; 4 | import { HttpClient } from '@angular/common/http'; 5 | import { Component, OnInit } from '@angular/core'; 6 | 7 | @Component({ 8 | selector: 'app-bootcamp-detail', 9 | templateUrl: './bootcamp-detail.component.html', 10 | styleUrls: ['./bootcamp-detail.component.css'], 11 | }) 12 | export class BootcampDetailComponent implements OnInit { 13 | bootcamp: IGetBootcampResponse; 14 | constructor( 15 | private bootcampService: BootcampService, 16 | private activatedRoute: ActivatedRoute 17 | ) {} 18 | 19 | ngOnInit(): void { 20 | this.activatedRoute.params.subscribe((params) => 21 | this.getBootcamp(params['id']) 22 | ); 23 | } 24 | 25 | getBootcamp(id: number) { 26 | this.bootcampService.getBootcamp(id).subscribe((data) => { 27 | this.bootcamp = data; 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-list/bootcamp-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/bootcamp/bootcamp-list/bootcamp-list.component.css -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-list/bootcamp-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BootcampListComponent } from './bootcamp-list.component'; 4 | 5 | describe('BootcampListComponent', () => { 6 | let component: BootcampListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BootcampListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BootcampListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/bootcamp/bootcamp-update/bootcamp-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { BootcampUpdateComponent } from './bootcamp-update.component'; 4 | 5 | describe('BootcampUpdateComponent', () => { 6 | let component: BootcampUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ BootcampUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(BootcampUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/employee/employe-list/employe-list.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/employee/employe-list/employe-list.component.css -------------------------------------------------------------------------------- /src/app/component/employee/employe-list/employe-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeListComponent } from './employe-list.component'; 4 | 5 | describe('EmployeListComponent', () => { 6 | let component: EmployeListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EmployeListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EmployeListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-add/employee-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeeAddComponent } from './employee-add.component'; 4 | 5 | describe('EmployeeAddComponent', () => { 6 | let component: EmployeeAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EmployeeAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EmployeeAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-add/employee-add.component.ts: -------------------------------------------------------------------------------- 1 | import { ToastrService } from 'ngx-toastr'; 2 | import { EmployeeService } from './../../../services/employee/employee.service'; 3 | import { ActivatedRoute, Router } from '@angular/router'; 4 | import { Component, OnInit } from '@angular/core'; 5 | import { 6 | FormBuilder, 7 | FormGroup, 8 | Validators, 9 | FormControl, 10 | } from '@angular/forms'; 11 | 12 | @Component({ 13 | selector: 'app-employee-add', 14 | templateUrl: './employee-add.component.html', 15 | styleUrls: ['./employee-add.component.css'], 16 | }) 17 | export class EmployeeAddComponent implements OnInit { 18 | employeeAddForm: FormGroup; 19 | constructor( 20 | private formBuilder: FormBuilder, 21 | private activatedRoute: ActivatedRoute, 22 | private employeeService: EmployeeService, 23 | private toastrService: ToastrService, 24 | private router: Router 25 | ) {} 26 | 27 | ngOnInit(): void { 28 | this.createAddEmployeeForm(); 29 | } 30 | 31 | createAddEmployeeForm() { 32 | this.employeeAddForm = this.formBuilder.group({ 33 | firstName: ['', Validators.required], 34 | lastName: ['', Validators.required], 35 | email: ['', Validators.required], 36 | password: ['', Validators.required], 37 | nationalIdentity: ['', Validators.required], 38 | dateOfBirth: ['', Validators.required], 39 | position: ['', Validators.required], 40 | image: ['', Validators.required], 41 | }); 42 | } 43 | add() { 44 | if (this.employeeAddForm.valid) { 45 | let employeeModel = Object.assign({}, this.employeeAddForm.value); 46 | this.employeeService.addEmployee(employeeModel).subscribe((data) => { 47 | this.toastrService.success('Çalışan Ekleme Başarılı'); 48 | this.router.navigate(['/admin/admin-employee']); 49 | }); 50 | } else { 51 | this.toastrService.warning('Form Eksik!!!'); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-detail/employee-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeeDetailComponent } from './employee-detail.component'; 4 | 5 | describe('EmployeeDetailComponent', () => { 6 | let component: EmployeeDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EmployeeDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EmployeeDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-detail/employee-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { EmployeeService } from './../../../services/employee/employee.service'; 3 | import { IGetEmployeeResponse } from './../../../models/response/employee/getEmployeeResponse'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-employee-detail', 8 | templateUrl: './employee-detail.component.html', 9 | styleUrls: ['./employee-detail.component.css'], 10 | }) 11 | export class EmployeeDetailComponent implements OnInit { 12 | employee: IGetEmployeeResponse; 13 | constructor( 14 | private employeeService: EmployeeService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.activatedRoute.params.subscribe((params) => 20 | this.getEmployee(params['id']) 21 | ); 22 | } 23 | 24 | getEmployee(id: number) { 25 | this.employeeService 26 | .getEmployee(id) 27 | .subscribe((data) => (this.employee = data)); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-login/employee-login.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 |
6 |

Giriş Ekranı

7 |

Kullanıcı Adı veya Şifrenizi Yazınız

8 |
9 |
10 | 24 | 31 |
32 |
33 |
34 |
35 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-login/employee-login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeeLoginComponent } from './employee-login.component'; 4 | 5 | describe('EmployeeLoginComponent', () => { 6 | let component: EmployeeLoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EmployeeLoginComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EmployeeLoginComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/employee/employee-update/employee-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeeUpdateComponent } from './employee-update.component'; 4 | 5 | describe('EmployeeUpdateComponent', () => { 6 | let component: EmployeeUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ EmployeeUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(EmployeeUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-about/home-about.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeAboutComponent } from './home-about.component'; 4 | 5 | describe('HomeAboutComponent', () => { 6 | let component: HomeAboutComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeAboutComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeAboutComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-about/home-about.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home-about', 5 | templateUrl: './home-about.component.html', 6 | styleUrls: ['./home-about.component.css'] 7 | }) 8 | export class HomeAboutComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/component/home/home-about/img/team-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/home/home-about/img/team-1.jpg -------------------------------------------------------------------------------- /src/app/component/home/home-about/img/team-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/home/home-about/img/team-2.jpg -------------------------------------------------------------------------------- /src/app/component/home/home-about/img/team-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/home/home-about/img/team-3.jpg -------------------------------------------------------------------------------- /src/app/component/home/home-bootcamp-detail/home-bootcamp-detail/home-bootcamp-detail.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/home/home-bootcamp-detail/home-bootcamp-detail/home-bootcamp-detail.component.css -------------------------------------------------------------------------------- /src/app/component/home/home-bootcamp-detail/home-bootcamp-detail/home-bootcamp-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeBootcampDetailComponent } from './home-bootcamp-detail.component'; 4 | 5 | describe('HomeBootcampDetailComponent', () => { 6 | let component: HomeBootcampDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeBootcampDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeBootcampDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-bootcamp-list/home-bootcamp-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeBootcampListComponent } from './home-bootcamp-list.component'; 4 | 5 | describe('HomeBootcampListComponent', () => { 6 | let component: HomeBootcampListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeBootcampListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeBootcampListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-bootcamp-list/home-bootcamp-list.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { BootcampService } from './../../../services/bootcamp/bootcamp.service'; 3 | import { IGetAllBootcampResponse } from './../../../models/response/bootcamp/getAllBootcampResponse'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-home-bootcamp-list', 8 | templateUrl: './home-bootcamp-list.component.html', 9 | styleUrls: ['./home-bootcamp-list.component.css'], 10 | }) 11 | export class HomeBootcampListComponent implements OnInit { 12 | bootcamps: IGetAllBootcampResponse[] = []; 13 | 14 | constructor( 15 | private bootcampService: BootcampService, 16 | private activatedRoute: ActivatedRoute 17 | ) {} 18 | 19 | ngOnInit(): void { 20 | this.activatedRoute.params.subscribe((params) => this.getAllBootcampList()); 21 | } 22 | 23 | getAllBootcampList() { 24 | this.bootcampService 25 | .getStateBootcamp() 26 | .subscribe((data) => (this.bootcamps = data)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/component/home/home-contact/home-contact.component.css: -------------------------------------------------------------------------------- 1 | /*** Contact ***/ 2 | @media (max-width: 992px) { 3 | .container.contact { 4 | max-width: 100% !important; 5 | } 6 | .responsive { 7 | height: 1100px !important; 8 | } 9 | 10 | .contact-text { 11 | padding-left: calc(((100% - 960px) / 2) + 0.75rem); 12 | } 13 | } 14 | 15 | @media (min-width: 1200px) { 16 | .contact-text { 17 | padding-left: calc(((100% - 1140px) / 2) + 0.75rem); 18 | } 19 | } 20 | 21 | @media (min-width: 1400px) { 22 | .contact-text { 23 | padding-left: calc(((100% - 1320px) / 2) + 0.75rem); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/app/component/home/home-contact/home-contact.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeContactComponent } from './home-contact.component'; 4 | 5 | describe('HomeContactComponent', () => { 6 | let component: HomeContactComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeContactComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeContactComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-contact/home-contact.component.ts: -------------------------------------------------------------------------------- 1 | import { ToastrService } from 'ngx-toastr'; 2 | import { Component, OnInit } from '@angular/core'; 3 | 4 | @Component({ 5 | selector: 'app-home-contact', 6 | templateUrl: './home-contact.component.html', 7 | styleUrls: ['./home-contact.component.css'], 8 | }) 9 | export class HomeContactComponent implements OnInit { 10 | constructor(private toastrService: ToastrService) {} 11 | 12 | ngOnInit(): void {} 13 | 14 | formSend() { 15 | this.toastrService.success('Mesajınız Başarıyla Gönderilmiştir.'); 16 | setTimeout(() => { 17 | window.location.reload(); 18 | }, 1000); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/component/home/home-footer/home-footer.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/home/home-footer/home-footer.component.css -------------------------------------------------------------------------------- /src/app/component/home/home-footer/home-footer.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeFooterComponent } from './home-footer.component'; 4 | 5 | describe('HomeFooterComponent', () => { 6 | let component: HomeFooterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeFooterComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeFooterComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-footer/home-footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home-footer', 5 | templateUrl: './home-footer.component.html', 6 | styleUrls: ['./home-footer.component.css'] 7 | }) 8 | export class HomeFooterComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/component/home/home-instructor-list/home-instructor-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeInstructorListComponent } from './home-instructor-list.component'; 4 | 5 | describe('HomeInstructorListComponent', () => { 6 | let component: HomeInstructorListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeInstructorListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeInstructorListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-instructor-list/home-instructor-list.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { IGetAllInstructorResponse } from './../../../models/response/instructor/getAllInstructorResponse'; 3 | import { InstructorService } from './../../../services/instructor/instructor.service'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-home-instructor-list', 8 | templateUrl: './home-instructor-list.component.html', 9 | styleUrls: ['./home-instructor-list.component.css'], 10 | }) 11 | export class HomeInstructorListComponent implements OnInit { 12 | instructors: IGetAllInstructorResponse[] = []; 13 | constructor( 14 | private instructorService: InstructorService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.activatedRoute.params.subscribe((params) => this.getInstructors()); 20 | } 21 | 22 | getInstructors() { 23 | this.instructorService 24 | .getAllInstructor() 25 | .subscribe((data) => (this.instructors = data)); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/app/component/home/home-page/home-page.component.css: -------------------------------------------------------------------------------- 1 | .bootcampcard:hover { 2 | transform: scale(1.1); 3 | transition: all 0.9s; 4 | } 5 | .bootcampcard { 6 | transition: all 0.9s; 7 | } 8 | @media (max-width: 1200px) { 9 | .responsive { 10 | display: none; 11 | } 12 | .responsiveBody { 13 | height: 350px !important; 14 | } 15 | } 16 | @media (max-width: 768px) { 17 | .responsiveBody { 18 | height: 450px !important; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/component/home/home-page/home-page.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomePageComponent } from './home-page.component'; 4 | 5 | describe('HomePageComponent', () => { 6 | let component: HomePageComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomePageComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomePageComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/home/home-page/home-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home-page', 5 | templateUrl: './home-page.component.html', 6 | styleUrls: ['./home-page.component.css'], 7 | }) 8 | export class HomePageComponent implements OnInit { 9 | constructor() {} 10 | 11 | ngOnInit(): void {} 12 | } 13 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-add/instructor-add.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorAddComponent } from './instructor-add.component'; 4 | 5 | describe('InstructorAddComponent', () => { 6 | let component: InstructorAddComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorAddComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorAddComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-detail/instructor-detail.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorDetailComponent } from './instructor-detail.component'; 4 | 5 | describe('InstructorDetailComponent', () => { 6 | let component: InstructorDetailComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorDetailComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorDetailComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-detail/instructor-detail.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { InstructorService } from './../../../services/instructor/instructor.service'; 3 | import { IGetInstructorResponse } from './../../../models/response/instructor/getInstructorResponse'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-instructor-detail', 8 | templateUrl: './instructor-detail.component.html', 9 | styleUrls: ['./instructor-detail.component.css'], 10 | }) 11 | export class InstructorDetailComponent implements OnInit { 12 | instructor: IGetInstructorResponse; 13 | constructor( 14 | private instructorService: InstructorService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.activatedRoute.params.subscribe((params) => 20 | this.getInstructor(params['id']) 21 | ); 22 | } 23 | getInstructor(id: number) { 24 | this.instructorService 25 | .getInstructor(id) 26 | .subscribe((data) => (this.instructor = data)); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-list/instructor-list.component.css: -------------------------------------------------------------------------------- 1 | @media (max-width: 828px) { 2 | .responsiveTable { 3 | font-size: 12px; 4 | width: 100% !important; 5 | padding: 0 !important; 6 | margin-left: 140px !important; 7 | } 8 | button { 9 | padding: 0 !important; 10 | font-size: 12px; 11 | } 12 | table, 13 | tr, 14 | td { 15 | padding: 0 !important; 16 | margin: 0 !important; 17 | } 18 | #res { 19 | display: none; 20 | } 21 | } 22 | @media (max-width: 450px) { 23 | .responsiveTable { 24 | margin: 0 !important; 25 | font-size: 12px; 26 | margin-top: 50px !important; 27 | width: 100% !important; 28 | padding: 0 !important; 29 | } 30 | table, 31 | button { 32 | padding: 0 !important; 33 | font-size: 10px; 34 | } 35 | #res { 36 | display: none; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-list/instructor-list.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorListComponent } from './instructor-list.component'; 4 | 5 | describe('InstructorListComponent', () => { 6 | let component: InstructorListComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorListComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorListComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-login/instructor-login.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 61 | 62 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-login/instructor-login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorLoginComponent } from './instructor-login.component'; 4 | 5 | describe('InstructorLoginComponent', () => { 6 | let component: InstructorLoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorLoginComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorLoginComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-login/instructor-login.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginInstructorModel } from './../../../models/token/login-instructor'; 2 | import { Router } from '@angular/router'; 3 | import { LoginInstructorService } from './../../../services/login-instructor/login-instructor.service'; 4 | import { ITokenModel } from './../../../models/token/tokenModel'; 5 | import { FormGroup, FormBuilder, Validators } from '@angular/forms'; 6 | import { Component, OnInit } from '@angular/core'; 7 | 8 | @Component({ 9 | selector: 'app-instructor-login', 10 | templateUrl: './instructor-login.component.html', 11 | styleUrls: ['./instructor-login.component.css'], 12 | }) 13 | export class InstructorLoginComponent implements OnInit { 14 | loginInstructorForm: FormGroup; 15 | tokenModel: ITokenModel; 16 | 17 | constructor( 18 | private loginInstructorService: LoginInstructorService, 19 | private formBuilder: FormBuilder, 20 | private router: Router 21 | ) {} 22 | 23 | ngOnInit(): void { 24 | this.createLoginInstructorForm(); 25 | } 26 | 27 | createLoginInstructorForm() { 28 | this.loginInstructorForm = this.formBuilder.group({ 29 | email: ['', Validators.required], 30 | password: ['', Validators.required], 31 | }); 32 | } 33 | loginInstructor() { 34 | if (this.loginInstructorForm.valid) { 35 | let loginModel: LoginInstructorModel = this.loginInstructorForm.value; 36 | this.loginInstructorService 37 | .loginInstructor(loginModel) 38 | .subscribe((data) => { 39 | if (data.length > 0) { 40 | this.tokenModel = data[0]; 41 | localStorage.setItem('token', this.tokenModel.token); 42 | this.router.navigate(['instructor']); 43 | alert('Giriş Başarılı Yönlendiriliyorsunız.'); 44 | } else { 45 | alert('Giriş Başarısız Tekrar Deneyiniz.'); 46 | } 47 | }); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/app/component/instructor/instructor-update/instructor-update.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorUpdateComponent } from './instructor-update.component'; 4 | 5 | describe('InstructorUpdateComponent', () => { 6 | let component: InstructorUpdateComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorUpdateComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorUpdateComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/navi/navi.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NaviComponent } from './navi.component'; 4 | 5 | describe('NaviComponent', () => { 6 | let component: NaviComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ NaviComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(NaviComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/navi/navi.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-navi', 5 | templateUrl: './navi.component.html', 6 | styleUrls: ['./navi.component.css'] 7 | }) 8 | export class NaviComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/component/register/register.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

KAYIT FORMU

5 |

6 | Bilgilerinizi doldurarak üyeliğinizi tamamlayınız. 7 |

8 |
9 |
10 | 36 | 39 |
40 |
41 |
42 |
43 | -------------------------------------------------------------------------------- /src/app/component/register/register.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { RegisterComponent } from './register.component'; 4 | 5 | describe('RegisterComponent', () => { 6 | let component: RegisterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ RegisterComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(RegisterComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/register/register.component.ts: -------------------------------------------------------------------------------- 1 | import { RegisterService } from './../../services/register/register.service'; 2 | import { Component, OnInit } from '@angular/core'; 3 | import { 4 | FormBuilder, 5 | FormGroup, 6 | Validators, 7 | FormControl, 8 | } from '@angular/forms'; 9 | import { ToastrService } from 'ngx-toastr'; 10 | import { Router } from '@angular/router'; 11 | 12 | @Component({ 13 | selector: 'app-register', 14 | templateUrl: './register.component.html', 15 | styleUrls: ['./register.component.css'], 16 | }) 17 | export class RegisterComponent implements OnInit { 18 | registerForm: FormGroup; 19 | constructor( 20 | private formBuilder: FormBuilder, 21 | private registerService: RegisterService, 22 | private toastrService: ToastrService, 23 | private router: Router 24 | ) {} 25 | 26 | ngOnInit(): void { 27 | this.createAddUsersForm(); 28 | } 29 | 30 | createAddUsersForm() { 31 | this.registerForm = this.formBuilder.group({ 32 | id: [''], 33 | name: ['', Validators.required], 34 | lastName: ['', Validators.required], 35 | email: ['', Validators.required], 36 | password: ['', Validators.required], 37 | role: ['roleApplicant'], 38 | token: ['aa'], 39 | expiration: ['20.10.2022'], 40 | }); 41 | } 42 | add() { 43 | if (this.registerForm.valid) { 44 | let userModel = Object.assign({}, this.registerForm.value); 45 | this.registerService.addUsers(userModel).subscribe((data) => { 46 | this.toastrService.success('Kayıt Başarılı '); 47 | this.router.navigate(['']); 48 | }); 49 | } else { 50 | this.toastrService.warning('Form Eksik!!!'); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-bootcamp/applicant-bootcamp.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/userApplicant/applicant-bootcamp/applicant-bootcamp.component.css -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-bootcamp/applicant-bootcamp.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | ... 7 |
8 | 9 |
10 | {{ bootcamp.name }} 11 |
12 |
13 | 14 |

Eğitmen: {{ bootcamp.instructorName }}

15 |

Detay: {{ bootcamp.about }}

16 |

17 | Başlangıç Tarihi {{ bootcamp.dateStart }} 18 |
19 | Bitiş Tarihi {{ bootcamp.dateEnd }} 20 |
21 | Başvuru 22 | Durumu: {{bootcamp.state==1?"Aktif":"Aktif Değil"}} 23 | 24 | 28 |

29 |
30 |
31 |
32 |
33 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-bootcamp/applicant-bootcamp.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantBootcampComponent } from './applicant-bootcamp.component'; 4 | 5 | describe('ApplicantBootcampComponent', () => { 6 | let component: ApplicantBootcampComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantBootcampComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantBootcampComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-notification/applicant-notification.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/userApplicant/applicant-notification/applicant-notification.component.css -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-notification/applicant-notification.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantNotificationComponent } from './applicant-notification.component'; 4 | 5 | describe('ApplicantNotificationComponent', () => { 6 | let component: ApplicantNotificationComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantNotificationComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantNotificationComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-notification/applicant-notification.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { ToastrService } from 'ngx-toastr'; 3 | import { IGetAllApplicationResponse } from './../../../models/response/application/getAllApplicationResponse'; 4 | import { ApplicationService } from './../../../services/application/application.service'; 5 | import { Component, OnInit, ɵɵqueryRefresh } from '@angular/core'; 6 | import { IGetApplicationResponse } from 'src/app/models/response/application/getApplicationResponse'; 7 | 8 | @Component({ 9 | selector: 'app-applicant-notification', 10 | templateUrl: './applicant-notification.component.html', 11 | styleUrls: ['./applicant-notification.component.css'], 12 | }) 13 | export class ApplicantNotificationComponent implements OnInit { 14 | applications: IGetAllApplicationResponse[] = []; 15 | constructor( 16 | private applicationService: ApplicationService, 17 | private toastrService: ToastrService, 18 | private activatedRoute: ActivatedRoute 19 | ) {} 20 | 21 | ngOnInit(): void { 22 | this.getApplication(localStorage.getItem('userId')); 23 | } 24 | 25 | getApplication(id: string) { 26 | this.applicationService 27 | .getId(id) 28 | .subscribe((data) => (this.applications = data)); 29 | } 30 | delete(id: number) { 31 | this.applicationService.deleteApplication(id).subscribe(); 32 | this.toastrService.error('Başvuru İptal Edildi', 'Dikkat'); 33 | setTimeout(() => { 34 | window.location.reload(); 35 | }, 1000); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-page/applicant-page.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/userApplicant/applicant-page/applicant-page.component.css -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-page/applicant-page.component.html: -------------------------------------------------------------------------------- 1 |

applicant-page works!

2 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-page/applicant-page.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantPageComponent } from './applicant-page.component'; 4 | 5 | describe('ApplicantPageComponent', () => { 6 | let component: ApplicantPageComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantPageComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantPageComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userApplicant/applicant-page/applicant-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-applicant-page', 5 | templateUrl: './applicant-page.component.html', 6 | styleUrls: ['./applicant-page.component.css'] 7 | }) 8 | export class ApplicantPageComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-applicant/instructor-applicant.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorApplicantComponent } from './instructor-applicant.component'; 4 | 5 | describe('InstructorApplicantComponent', () => { 6 | let component: InstructorApplicantComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorApplicantComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorApplicantComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-applicant/instructor-applicant.component.ts: -------------------------------------------------------------------------------- 1 | import { Router } from '@angular/router'; 2 | import { BootcampService } from 'src/app/services/bootcamp/bootcamp.service'; 3 | import { Component, OnInit } from '@angular/core'; 4 | import { ToastrService } from 'ngx-toastr'; 5 | import { 6 | FormBuilder, 7 | FormGroup, 8 | Validators, 9 | FormControl, 10 | } from '@angular/forms'; 11 | 12 | @Component({ 13 | selector: 'app-instructor-applicant', 14 | templateUrl: './instructor-applicant.component.html', 15 | styleUrls: ['./instructor-applicant.component.css'], 16 | }) 17 | export class InstructorApplicantComponent implements OnInit { 18 | bootcampForm: FormGroup; 19 | constructor( 20 | private formBuilder: FormBuilder, 21 | private bootcampService: BootcampService, 22 | private toastrService: ToastrService, 23 | private router: Router 24 | ) {} 25 | 26 | ngOnInit(): void { 27 | this.createBootcampForm(); 28 | } 29 | createBootcampForm() { 30 | this.bootcampForm = this.formBuilder.group({ 31 | instructorId: [localStorage.getItem('instructorId')], 32 | name: ['', Validators.required], 33 | dateStart: ['', Validators.required], 34 | dateEnd: ['', Validators.required], 35 | state: [1], 36 | instructorName: ['', Validators.required], 37 | about: ['', Validators.required], 38 | image: ['', Validators.required], 39 | }); 40 | } 41 | 42 | add() { 43 | if (this.bootcampForm.valid) { 44 | let bootcamp = Object.assign({}, this.bootcampForm.value); 45 | this.bootcampService.addBootcamp(bootcamp).subscribe((data) => { 46 | this.toastrService.success('Bootcamp Ekleme Başarılı'); 47 | this.router.navigate(['/instructor/instructor-bootcamp']); 48 | }); 49 | } else { 50 | this.toastrService.warning('Form Eksik!!!'); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-bootcamp/instructor-bootcamp.component.css: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-bootcamp/instructor-bootcamp.component.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |
6 | ... 7 |
8 | 9 |
10 | {{ bootcamp.name }} 11 |
12 |
13 | 14 |

Eğitmen: {{ bootcamp.instructorName }}

15 |

Detay: {{ bootcamp.about }}

16 |

17 | Başlangıç Tarihi {{ bootcamp.dateStart }} 18 |
19 | Bitiş Tarihi {{ bootcamp.dateEnd }} 20 |

21 | 24 |
25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-bootcamp/instructor-bootcamp.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorBootcampComponent } from './instructor-bootcamp.component'; 4 | 5 | describe('InstructorBootcampComponent', () => { 6 | let component: InstructorBootcampComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorBootcampComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorBootcampComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-bootcamp/instructor-bootcamp.component.ts: -------------------------------------------------------------------------------- 1 | import { ActivatedRoute } from '@angular/router'; 2 | import { IGetAllBootcampResponse } from './../../../models/response/bootcamp/getAllBootcampResponse'; 3 | import { BootcampService } from './../../../services/bootcamp/bootcamp.service'; 4 | import { Component, OnInit } from '@angular/core'; 5 | 6 | @Component({ 7 | selector: 'app-instructor-bootcamp', 8 | templateUrl: './instructor-bootcamp.component.html', 9 | styleUrls: ['./instructor-bootcamp.component.css'], 10 | }) 11 | export class InstructorBootcampComponent implements OnInit { 12 | bootcamps: IGetAllBootcampResponse[] = []; 13 | constructor( 14 | private bootcampService: BootcampService, 15 | private activatedRoute: ActivatedRoute 16 | ) {} 17 | 18 | ngOnInit(): void { 19 | this.getBootcamps(localStorage.getItem('instructorId')); 20 | } 21 | getBootcamps(id: string) { 22 | this.bootcampService 23 | .getInstructorBootcamp(id) 24 | .subscribe((data) => (this.bootcamps = data)); 25 | } 26 | delete(id: number) { 27 | this.bootcampService.deletebootcamp(id).subscribe(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-page/instructor-page.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/component/userInstructor/instructor-page/instructor-page.component.css -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-page/instructor-page.component.html: -------------------------------------------------------------------------------- 1 |

instructor-page works!

2 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-page/instructor-page.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorPageComponent } from './instructor-page.component'; 4 | 5 | describe('InstructorPageComponent', () => { 6 | let component: InstructorPageComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorPageComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorPageComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/component/userInstructor/instructor-page/instructor-page.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-instructor-page', 5 | templateUrl: './instructor-page.component.html', 6 | styleUrls: ['./instructor-page.component.css'] 7 | }) 8 | export class InstructorPageComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/guards/applicantGuard/login-applicant.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginApplicantGuard } from './login-applicant.guard'; 4 | 5 | describe('LoginApplicantGuard', () => { 6 | let guard: LoginApplicantGuard; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | guard = TestBed.inject(LoginApplicantGuard); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(guard).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/guards/applicantGuard/login-applicant.guard.ts: -------------------------------------------------------------------------------- 1 | import { LoginApplicantService } from './../../services/login-applicant/login-applicant.service'; 2 | import { Injectable } from '@angular/core'; 3 | import { 4 | ActivatedRouteSnapshot, 5 | CanActivate, 6 | Router, 7 | RouterStateSnapshot, 8 | UrlTree, 9 | } from '@angular/router'; 10 | import { Observable } from 'rxjs'; 11 | 12 | @Injectable({ 13 | providedIn: 'root', 14 | }) 15 | export class LoginApplicantGuard implements CanActivate { 16 | constructor( 17 | private loginApplicantService: LoginApplicantService, 18 | private router: Router 19 | ) {} 20 | canActivate( 21 | route: ActivatedRouteSnapshot, 22 | state: RouterStateSnapshot 23 | ): 24 | | Observable 25 | | Promise 26 | | boolean 27 | | UrlTree { 28 | let isAuthenticated = this.loginApplicantService.isAuthenticated(); 29 | if (isAuthenticated == true) { 30 | return true; 31 | } else { 32 | this.router.navigate(['login']); 33 | console.log('sisteme giriş yapınız'); 34 | return false; 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /src/app/guards/instructorGuard/login-instructor.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginInstructorGuard } from './login-instructor.guard'; 4 | 5 | describe('LoginInstructorGuard', () => { 6 | let guard: LoginInstructorGuard; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | guard = TestBed.inject(LoginInstructorGuard); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(guard).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/guards/instructorGuard/login-instructor.guard.ts: -------------------------------------------------------------------------------- 1 | import { LoginInstructorService } from './../../services/login-instructor/login-instructor.service'; 2 | import { LoginApplicantService } from './../../services/login-applicant/login-applicant.service'; 3 | import { InstructorService } from './../../services/instructor/instructor.service'; 4 | import { Injectable } from '@angular/core'; 5 | import { 6 | ActivatedRouteSnapshot, 7 | CanActivate, 8 | Router, 9 | RouterStateSnapshot, 10 | UrlTree, 11 | } from '@angular/router'; 12 | import { Observable } from 'rxjs'; 13 | 14 | @Injectable({ 15 | providedIn: 'root', 16 | }) 17 | export class LoginInstructorGuard implements CanActivate { 18 | constructor( 19 | private instructorService: LoginInstructorService, 20 | private router: Router 21 | ) {} 22 | canActivate( 23 | route: ActivatedRouteSnapshot, 24 | state: RouterStateSnapshot 25 | ): 26 | | Observable 27 | | Promise 28 | | boolean 29 | | UrlTree { 30 | let isAuthenticated = this.instructorService.isAuthenticated(); 31 | if (isAuthenticated == true) { 32 | return true; 33 | } else { 34 | this.router.navigate(['login']); 35 | console.log('Sisteme Giriş Yapınız'); 36 | return false; 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/app/guards/login-employe.guard.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginEmployeGuard } from './login-employe.guard'; 4 | 5 | describe('LoginEmployeGuard', () => { 6 | let guard: LoginEmployeGuard; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | guard = TestBed.inject(LoginEmployeGuard); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(guard).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/guards/login-employe.guard.ts: -------------------------------------------------------------------------------- 1 | import { LoginEmployeeService } from './../services/login-employee/login-employee.service'; 2 | import { Injectable } from '@angular/core'; 3 | import { 4 | ActivatedRouteSnapshot, 5 | CanActivate, 6 | Router, 7 | RouterStateSnapshot, 8 | UrlTree, 9 | } from '@angular/router'; 10 | import { Observable } from 'rxjs'; 11 | 12 | @Injectable({ 13 | providedIn: 'root', 14 | }) 15 | export class LoginEmployeGuard implements CanActivate { 16 | userRoleIn = ''; 17 | constructor( 18 | private loginEmployeeService: LoginEmployeeService, 19 | private router: Router 20 | ) {} 21 | 22 | canActivate( 23 | route: ActivatedRouteSnapshot, 24 | state: RouterStateSnapshot 25 | ): 26 | | Observable 27 | | Promise 28 | | boolean 29 | | UrlTree { 30 | let url: string = state.url; 31 | return this.chechUserLogin(route, url); 32 | } 33 | 34 | chechUserLogin(route: ActivatedRouteSnapshot, url: any): boolean { 35 | if (this.loginEmployeeService.isAuthenticated()) { 36 | const userRole = this.loginEmployeeService.getRole(); 37 | this.userRoleIn = userRole; 38 | if (route.data['role'] && route.data['role'].indexOf(userRole) === -1) { 39 | return false; 40 | } 41 | return true; 42 | } 43 | return false; 44 | } 45 | } 46 | 47 | // let isAuthenticated = this.loginEmployeeService.isAuthenticated(); 48 | // if (isAuthenticated == true) { 49 | // return true; 50 | // } else { 51 | // this.router.navigate(['login']); 52 | // console.log('Sisteme Giriş Yapınız'); 53 | // return false; 54 | // } 55 | -------------------------------------------------------------------------------- /src/app/interceptors/login-employee.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { 3 | HttpRequest, 4 | HttpHandler, 5 | HttpEvent, 6 | HttpInterceptor, 7 | } from '@angular/common/http'; 8 | import { Observable } from 'rxjs'; 9 | 10 | @Injectable() 11 | export class EmployeeInterceptor implements HttpInterceptor { 12 | constructor() {} 13 | 14 | intercept( 15 | request: HttpRequest, 16 | next: HttpHandler 17 | ): Observable> { 18 | return next.handle(request); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/models/request/applicant/createApplicantRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateApplicantRequest { 2 | firstName: string; 3 | lastName: string; 4 | email: string; 5 | password: string; 6 | nationalIdentity: number; 7 | dateOfBirth: string; 8 | about: string; 9 | image: string; 10 | state: number; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/request/applicant/updateApplicantRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateApplicantRequest { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | about: string; 8 | nationalIdentity: number; 9 | dateOfBirth: string; 10 | image: string; 11 | state: number; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/models/request/application/createApplicationRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateApplicationRequest { 2 | userId: number; 3 | userName: string; 4 | 5 | applyName: string; 6 | bootcampId: number; 7 | bootcampName: string; 8 | 9 | state: number; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/request/application/updateApplicationRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateApplicationRequest { 2 | userId: number; 3 | bootcampId: number; 4 | state: number; 5 | 6 | applyName: string; 7 | 8 | userName: string; 9 | bootcampName: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/request/blackList/createBlackListRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateBlackListRequest { 2 | applicantId: number; 3 | date: string; 4 | reason: string; 5 | applicantName: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/models/request/blackList/updateBlackListRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateBlackListRequest { 2 | id: number; 3 | applicantId: number; 4 | date: string; 5 | reason: string; 6 | } 7 | -------------------------------------------------------------------------------- /src/app/models/request/bootcamp/createBootcampRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateBootcampRequest { 2 | instructorId: number; 3 | name: string; 4 | dateStart: string; 5 | dateEnd: string; 6 | state: number; 7 | about: string; 8 | instructorName: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/request/bootcamp/updateBootcampRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateBootcampRequest { 2 | id: number; 3 | instructorId: number; 4 | name: string; 5 | dateStart: string; 6 | dateEnd: string; 7 | state: number; 8 | about: string; 9 | instructorName: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/request/employee/createEmployeeRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateEmployeeRequest { 2 | firstName: string; 3 | lastName: string; 4 | email: string; 5 | password: string; 6 | nationalIdentity: number; 7 | dateOfBirth: string; 8 | position: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/request/employee/updateEmployeeRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateEmployeeRequest { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | nationalIdentity: number; 8 | dateOfBirth: string; 9 | position: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/request/instructor/createInstructorRequest.ts: -------------------------------------------------------------------------------- 1 | export interface ICreateInstructorRequest { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | dateOfBirth: string; 6 | email: string; 7 | password: string; 8 | companyName: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/request/instructor/updateInstructorRequest.ts: -------------------------------------------------------------------------------- 1 | export interface IUpdateInstructorRequest { 2 | firstName: string; 3 | lastName: string; 4 | dateOfBirth: string; 5 | email: string; 6 | password: string; 7 | companyName: string; 8 | image: string; 9 | } 10 | -------------------------------------------------------------------------------- /src/app/models/response/applicant/getAllApplicantResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllApplicantResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | about: string; 8 | nationalIdentity: number; 9 | dateOfBirth: string; 10 | image: string; 11 | state: number; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/models/response/applicant/getApplicantResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetApplicantResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | about: string; 8 | nationalIdentity: number; 9 | dateOfBirth: string; 10 | image: string; 11 | state: number; 12 | } 13 | -------------------------------------------------------------------------------- /src/app/models/response/application/getAllApplicationResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllApplicationResponse { 2 | id: number; 3 | userId: number; 4 | bootcampId: number; 5 | state: number; 6 | applyName: string; 7 | 8 | userName: string; 9 | bootcampName: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/response/application/getApplicationResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetApplicationResponse { 2 | id: number; 3 | userId: number; 4 | bootcampId: number; 5 | state: number; 6 | applyName: string; 7 | 8 | userName: string; 9 | bootcampName: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/response/blackList/getAllBlackListResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllBlackListResponse { 2 | id: number; 3 | applicantId: number; 4 | date: string; 5 | reason: string; 6 | applicantName: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/models/response/blackList/getBlackListResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetBlackListResponse { 2 | id: number; 3 | applicantId: number; 4 | date: string; 5 | reason: string; 6 | applicantName: string; 7 | } 8 | -------------------------------------------------------------------------------- /src/app/models/response/bootcamp/getAllBootcampResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllBootcampResponse { 2 | id: number; 3 | instructorId: number; 4 | name: string; 5 | dateStart: string; 6 | dateEnd: string; 7 | state: number; 8 | about: string; 9 | instructorName: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/response/bootcamp/getBootcampResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetBootcampResponse { 2 | id: number; 3 | instructorId: number; 4 | name: string; 5 | dateStart: string; 6 | dateEnd: string; 7 | state: number; 8 | about: string; 9 | instructorName: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/response/employee/getAllEmployeeResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllEmployeeResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | nationalIdentity: number; 8 | dateOfBirth: string; 9 | position: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/response/employee/getEmployeeResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetEmployeeResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | nationalIdentity: number; 8 | dateOfBirth: string; 9 | position: string; 10 | image: string; 11 | } 12 | -------------------------------------------------------------------------------- /src/app/models/response/instructor/getAllInstructorResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetAllInstructorResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | companyName: string; 8 | dateOfBirth: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/response/instructor/getInstructorResponse.ts: -------------------------------------------------------------------------------- 1 | export interface IGetInstructorResponse { 2 | id: number; 3 | firstName: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | companyName: string; 8 | dateOfBirth: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/token/login-applicant.ts: -------------------------------------------------------------------------------- 1 | export interface LoginApplicantModel { 2 | email: string; 3 | password: string; 4 | role: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/models/token/login-employee.ts: -------------------------------------------------------------------------------- 1 | export interface LoginEmployeeModel { 2 | email: string; 3 | password: string; 4 | role: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/models/token/login-instructor.ts: -------------------------------------------------------------------------------- 1 | export interface LoginInstructorModel { 2 | email: string; 3 | password: string; 4 | role: string; 5 | } 6 | -------------------------------------------------------------------------------- /src/app/models/token/tokenModel.ts: -------------------------------------------------------------------------------- 1 | export interface ITokenModel { 2 | token: string; 3 | expiration: string; 4 | role: string; 5 | id: string; 6 | instructorId: string; 7 | name: string; 8 | lastName: string; 9 | image: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/models/token/users-model.ts: -------------------------------------------------------------------------------- 1 | export interface GetUsers { 2 | id: number; 3 | name: string; 4 | lastName: string; 5 | email: string; 6 | password: string; 7 | expiration: string; 8 | token: string; 9 | role: string; 10 | } 11 | -------------------------------------------------------------------------------- /src/app/pages/admin/admin.component.css: -------------------------------------------------------------------------------- 1 | @media (max-width: 450px) { 2 | .asd { 3 | margin-left: 0; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/app/pages/admin/admin.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 |
7 | 8 |
9 |
10 | -------------------------------------------------------------------------------- /src/app/pages/admin/admin.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AdminComponent } from './admin.component'; 4 | 5 | describe('AdminComponent', () => { 6 | let component: AdminComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ AdminComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(AdminComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/pages/admin/admin.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-admin', 5 | templateUrl: './admin.component.html', 6 | styleUrls: ['./admin.component.css'] 7 | }) 8 | export class AdminComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/pages/applicant/applicant.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/pages/applicant/applicant.component.css -------------------------------------------------------------------------------- /src/app/pages/applicant/applicant.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 33 |
34 | 35 |
36 | 37 |
38 |
-------------------------------------------------------------------------------- /src/app/pages/applicant/applicant.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantComponent } from './applicant.component'; 4 | 5 | describe('ApplicantComponent', () => { 6 | let component: ApplicantComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ ApplicantComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(ApplicantComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/pages/applicant/applicant.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginEmployeeService } from './../../services/login-employee/login-employee.service'; 2 | import { LoginApplicantService } from './../../services/login-applicant/login-applicant.service'; 3 | import { Component, OnInit } from '@angular/core'; 4 | import { Router } from '@angular/router'; 5 | 6 | @Component({ 7 | selector: 'app-applicant', 8 | templateUrl: './applicant.component.html', 9 | styleUrls: ['./applicant.component.css'], 10 | }) 11 | export class ApplicantComponent implements OnInit { 12 | name = localStorage.getItem('name') + ' ' + localStorage.getItem('lastName'); 13 | image = localStorage.getItem('image'); 14 | constructor( 15 | private loginEmployeeService: LoginEmployeeService, 16 | private router: Router 17 | ) {} 18 | 19 | ngOnInit(): void {} 20 | logout() { 21 | this.loginEmployeeService.logout(); 22 | this.router.navigate(['']); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/pages/home/home.component.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | } 4 | -------------------------------------------------------------------------------- /src/app/pages/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(HomeComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/pages/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home', 5 | templateUrl: './home.component.html', 6 | styleUrls: ['./home.component.css'] 7 | }) 8 | export class HomeComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/app/pages/instructor/instructor.component.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/app/pages/instructor/instructor.component.css -------------------------------------------------------------------------------- /src/app/pages/instructor/instructor.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 34 |
35 | 36 |
37 | 38 |
39 |
-------------------------------------------------------------------------------- /src/app/pages/instructor/instructor.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorComponent } from './instructor.component'; 4 | 5 | describe('InstructorComponent', () => { 6 | let component: InstructorComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async () => { 10 | await TestBed.configureTestingModule({ 11 | declarations: [ InstructorComponent ] 12 | }) 13 | .compileComponents(); 14 | 15 | fixture = TestBed.createComponent(InstructorComponent); 16 | component = fixture.componentInstance; 17 | fixture.detectChanges(); 18 | }); 19 | 20 | it('should create', () => { 21 | expect(component).toBeTruthy(); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /src/app/pages/instructor/instructor.component.ts: -------------------------------------------------------------------------------- 1 | import { LoginEmployeeService } from './../../services/login-employee/login-employee.service'; 2 | import { Router } from '@angular/router'; 3 | import { Component, OnInit } from '@angular/core'; 4 | 5 | @Component({ 6 | selector: 'app-instructor', 7 | templateUrl: './instructor.component.html', 8 | styleUrls: ['./instructor.component.css'], 9 | }) 10 | export class InstructorComponent implements OnInit { 11 | name = localStorage.getItem('name') + ' ' + localStorage.getItem('lastName'); 12 | image = localStorage.getItem('image'); 13 | constructor( 14 | private loginEmployeeService: LoginEmployeeService, 15 | private router: Router 16 | ) {} 17 | 18 | ngOnInit(): void {} 19 | 20 | logout() { 21 | this.loginEmployeeService.logout(); 22 | this.router.navigate(['']); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/app/pipes/applicantfilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllApplicantResponse } from './../models/response/applicant/getAllApplicantResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'applicantfilter', 6 | }) 7 | export class ApplicantfilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllApplicantResponse[], 10 | filterApplicant: string 11 | ): IGetAllApplicantResponse[] { 12 | filterApplicant = filterApplicant 13 | ? filterApplicant.toLocaleLowerCase() 14 | : null; 15 | 16 | return filterApplicant 17 | ? value.filter( 18 | (f: IGetAllApplicantResponse) => 19 | f.firstName.toLocaleLowerCase().indexOf(filterApplicant) !== -1 20 | ) 21 | : value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/pipes/applicationfilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllApplicationResponse } from './../models/response/application/getAllApplicationResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'applicationfilter', 6 | }) 7 | export class ApplicationfilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllApplicationResponse[], 10 | filterApplication: string 11 | ): IGetAllApplicationResponse[] { 12 | filterApplication = filterApplication 13 | ? filterApplication.toLocaleLowerCase() 14 | : null; 15 | 16 | return filterApplication 17 | ? value.filter( 18 | (e: IGetAllApplicationResponse) => 19 | e.userName.toLocaleLowerCase().indexOf(filterApplication) !== -1 20 | ) 21 | : value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/pipes/blacklistfilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllBlackListResponse } from './../models/response/blackList/getAllBlackListResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'blacklistfilter', 6 | }) 7 | export class BlacklistfilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllBlackListResponse[], 10 | filterBlacklist: string 11 | ): IGetAllBlackListResponse[] { 12 | filterBlacklist = filterBlacklist 13 | ? filterBlacklist.toLocaleLowerCase() 14 | : null; 15 | 16 | return filterBlacklist 17 | ? value.filter( 18 | (f: IGetAllBlackListResponse) => 19 | f.applicantName.toLocaleLowerCase().indexOf(filterBlacklist) !== -1 20 | ) 21 | : value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/pipes/bootcampfilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllBootcampResponse } from './../models/response/bootcamp/getAllBootcampResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'bootcampfilter', 6 | }) 7 | export class BootcampfilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllBootcampResponse[], 10 | filterText: string 11 | ): IGetAllBootcampResponse[] { 12 | filterText = filterText ? filterText.toLocaleLowerCase() : null; 13 | return filterText 14 | ? value.filter( 15 | (b: IGetAllBootcampResponse) => 16 | b.name.toLocaleLowerCase().indexOf(filterText) !== -1 17 | ) 18 | : value; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/app/pipes/employeefilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllEmployeeResponse } from './../models/response/employee/getAllEmployeeResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'employeefilter', 6 | }) 7 | export class EmployeefilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllEmployeeResponse[], 10 | filterTextEmployee: string 11 | ): IGetAllEmployeeResponse[] { 12 | filterTextEmployee = filterTextEmployee 13 | ? filterTextEmployee.toLocaleLowerCase() 14 | : null; 15 | return filterTextEmployee 16 | ? value.filter( 17 | (c: IGetAllEmployeeResponse) => 18 | c.firstName.toLocaleLowerCase().indexOf(filterTextEmployee) !== -1 19 | ) 20 | : value; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/app/pipes/instructorfilter.pipe.ts: -------------------------------------------------------------------------------- 1 | import { IGetAllInstructorResponse } from './../models/response/instructor/getAllInstructorResponse'; 2 | import { Pipe, PipeTransform } from '@angular/core'; 3 | 4 | @Pipe({ 5 | name: 'instructorfilter', 6 | }) 7 | export class InstructorfilterPipe implements PipeTransform { 8 | transform( 9 | value: IGetAllInstructorResponse[], 10 | filterInstructor: string 11 | ): IGetAllInstructorResponse[] { 12 | filterInstructor = filterInstructor 13 | ? filterInstructor.toLocaleLowerCase() 14 | : null; 15 | 16 | return filterInstructor 17 | ? value.filter( 18 | (d: IGetAllInstructorResponse) => 19 | d.firstName.toLocaleLowerCase().indexOf(filterInstructor) !== -1 20 | ) 21 | : value; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/app/services/applicant/applicant.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicantService } from './applicant.service'; 4 | 5 | describe('ApplicantService', () => { 6 | let service: ApplicantService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(ApplicantService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/applicant/applicant.service.ts: -------------------------------------------------------------------------------- 1 | import { ICreateApplicantRequest } from './../../models/request/applicant/createApplicantRequest'; 2 | import { IGetApplicantResponse } from './../../models/response/applicant/getApplicantResponse'; 3 | import { IGetAllApplicantResponse } from './../../models/response/applicant/getAllApplicantResponse'; 4 | import { HttpClient } from '@angular/common/http'; 5 | import { Injectable } from '@angular/core'; 6 | import { Observable } from 'rxjs'; 7 | 8 | @Injectable({ 9 | providedIn: 'root', 10 | }) 11 | export class ApplicantService { 12 | apiUrl = 'http://localhost:3000/applicant'; 13 | 14 | constructor(private httpClient: HttpClient) {} 15 | 16 | getAllApplicant(): Observable { 17 | return this.httpClient.get( 18 | this.apiUrl + '?state=1' 19 | ); 20 | } 21 | 22 | getApplicant(id: number): Observable { 23 | return this.httpClient.get(this.apiUrl + '/' + id); 24 | } 25 | 26 | //add-update-delete 27 | addApplicant(applicant: ICreateApplicantRequest) { 28 | return this.httpClient.post(this.apiUrl, applicant); 29 | } 30 | updateApplicant(id: number, applicant: any) { 31 | return this.httpClient.put(this.apiUrl + '/' + id, applicant); 32 | } 33 | // deleteApplicant(applicant: IGetAllApplicantResponse) { 34 | // return this.httpClient.delete(this.apiUrl + '/' + applicant.id); 35 | // } 36 | deleteApplicant(id: number) { 37 | return this.httpClient.delete(this.apiUrl + '/' + id); 38 | } 39 | updateApplicantState( 40 | id: number, 41 | selectedState: number 42 | ): Observable { 43 | return this.httpClient.patch( 44 | this.apiUrl + '/' + id, 45 | { state: selectedState } 46 | ); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/app/services/application/application.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { ApplicationService } from './application.service'; 4 | 5 | describe('ApplicationService', () => { 6 | let service: ApplicationService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(ApplicationService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/application/application.service.ts: -------------------------------------------------------------------------------- 1 | import { IUpdateApplicationRequest } from './../../models/request/application/updateApplicationRequest'; 2 | import { ICreateApplicationRequest } from './../../models/request/application/createApplicationRequest'; 3 | import { ICreateApplicantRequest } from './../../models/request/applicant/createApplicantRequest'; 4 | import { IGetApplicationResponse } from './../../models/response/application/getApplicationResponse'; 5 | import { IGetAllApplicationResponse } from './../../models/response/application/getAllApplicationResponse'; 6 | import { Observable } from 'rxjs'; 7 | import { HttpClient } from '@angular/common/http'; 8 | import { Injectable } from '@angular/core'; 9 | import { identifierName } from '@angular/compiler'; 10 | 11 | @Injectable({ 12 | providedIn: 'root', 13 | }) 14 | export class ApplicationService { 15 | apiUrl = 'http://localhost:3000/application'; 16 | 17 | constructor(private httpClient: HttpClient) {} 18 | 19 | getAllApplication(): Observable { 20 | return this.httpClient.get(this.apiUrl); 21 | } 22 | getId(id: string) { 23 | return this.httpClient.get( 24 | this.apiUrl + '?userId=' + id 25 | ); 26 | } 27 | 28 | getApplication(id: number): Observable { 29 | return this.httpClient.get(this.apiUrl + '/' + id); 30 | } 31 | addApplication(application: ICreateApplicationRequest) { 32 | return this.httpClient.post(this.apiUrl, application); 33 | } 34 | updateApplication(id: number, application: any) { 35 | return this.httpClient.put(this.apiUrl + '/' + id, application); 36 | } 37 | // deleteApplication(application: IGetAllApplicationResponse) { 38 | // return this.httpClient.delete(this.apiUrl + '/' + application.id); 39 | // } 40 | deleteApplication(id: number) { 41 | return this.httpClient.delete(this.apiUrl + '/' + id); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/app/services/blacklist/blacklist.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { BlacklistService } from './blacklist.service'; 4 | 5 | describe('BlacklistService', () => { 6 | let service: BlacklistService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(BlacklistService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/blacklist/blacklist.service.ts: -------------------------------------------------------------------------------- 1 | import { ICreateBlackListRequest } from './../../models/request/blackList/createBlackListRequest'; 2 | import { IGetBlackListResponse } from './../../models/response/blackList/getBlackListResponse'; 3 | import { IGetAllBlackListResponse } from './../../models/response/blackList/getAllBlackListResponse'; 4 | import { Observable } from 'rxjs'; 5 | import { HttpClient } from '@angular/common/http'; 6 | import { Injectable } from '@angular/core'; 7 | 8 | @Injectable({ 9 | providedIn: 'root', 10 | }) 11 | export class BlacklistService { 12 | apiUrl = 'http://localhost:3000/blacklist'; 13 | 14 | constructor(private httpClient: HttpClient) {} 15 | 16 | getAllBlackList(): Observable { 17 | return this.httpClient.get(this.apiUrl); 18 | } 19 | 20 | getBlackList(id: number): Observable { 21 | return this.httpClient.get(this.apiUrl + '/' + id); 22 | } 23 | addBlackList(blackList: ICreateBlackListRequest) { 24 | return this.httpClient.post(this.apiUrl, blackList); 25 | } 26 | updateBlackList(id: number, blacklist: any) { 27 | return this.httpClient.put(this.apiUrl + '/' + id, blacklist); 28 | } 29 | // deleteBlackList(blackList: IGetAllBlackListResponse) { 30 | // return this.httpClient.delete(this.apiUrl + '/' + blackList.id); 31 | // } 32 | deleteBlackList(id: number) { 33 | return this.httpClient.delete(this.apiUrl + '/' + id); 34 | } 35 | removeApplicant(id: number) { 36 | return this.httpClient.delete( 37 | this.apiUrl + '/' + id 38 | ); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/app/services/bootcamp/bootcamp.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { BootcampService } from './bootcamp.service'; 4 | 5 | describe('BootcampService', () => { 6 | let service: BootcampService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(BootcampService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/bootcamp/bootcamp.service.ts: -------------------------------------------------------------------------------- 1 | import { ICreateBootcampRequest } from './../../models/request/bootcamp/createBootcampRequest'; 2 | import { IGetBootcampResponse } from './../../models/response/bootcamp/getBootcampResponse'; 3 | import { Observable } from 'rxjs'; 4 | import { IGetAllBootcampResponse } from './../../models/response/bootcamp/getAllBootcampResponse'; 5 | import { HttpClient } from '@angular/common/http'; 6 | import { Injectable } from '@angular/core'; 7 | 8 | @Injectable({ 9 | providedIn: 'root', 10 | }) 11 | export class BootcampService { 12 | apiUrl = 'http://localhost:3000/bootcamp'; 13 | 14 | constructor(private httpClient: HttpClient) {} 15 | 16 | getAllBootcamp(): Observable { 17 | return this.httpClient.get(this.apiUrl); 18 | } 19 | getStateBootcamp() { 20 | return this.httpClient.get( 21 | this.apiUrl + '?state=1' 22 | ); 23 | } 24 | getBootcamp(id: number): Observable { 25 | return this.httpClient.get(this.apiUrl + '/' + id); 26 | } 27 | getInstructorBootcamp(id: string) { 28 | return this.httpClient.get( 29 | this.apiUrl + '?instructorId=' + id 30 | ); 31 | } 32 | addBootcamp(bootcamp: ICreateBootcampRequest) { 33 | return this.httpClient.post(this.apiUrl, bootcamp); 34 | } 35 | updateBootcamp(id: number, bootcamp: any) { 36 | return this.httpClient.put(this.apiUrl + '/' + id, bootcamp); 37 | } 38 | 39 | deletebootcamp(id: number) { 40 | return this.httpClient.delete(this.apiUrl + '/' + id); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/app/services/employee/employee.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { EmployeeService } from './employee.service'; 4 | 5 | describe('EmployeeService', () => { 6 | let service: EmployeeService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(EmployeeService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/employee/employee.service.ts: -------------------------------------------------------------------------------- 1 | import { ICreateEmployeeRequest } from './../../models/request/employee/createEmployeeRequest'; 2 | import { IGetAllEmployeeResponse } from './../../models/response/employee/getAllEmployeeResponse'; 3 | import { Observable } from 'rxjs'; 4 | import { HttpClient } from '@angular/common/http'; 5 | import { Injectable } from '@angular/core'; 6 | import { IGetEmployeeResponse } from 'src/app/models/response/employee/getEmployeeResponse'; 7 | 8 | @Injectable({ 9 | providedIn: 'root', 10 | }) 11 | export class EmployeeService { 12 | apiUrl = 'http://localhost:3000/employee'; 13 | constructor(private httpClient: HttpClient) {} 14 | 15 | getAllEmployee(): Observable { 16 | return this.httpClient.get(this.apiUrl); 17 | } 18 | getEmployee(id: number): Observable { 19 | return this.httpClient.get(this.apiUrl + '/' + id); 20 | } 21 | addEmployee(employee: ICreateEmployeeRequest) { 22 | return this.httpClient.post(this.apiUrl, employee); 23 | } 24 | deleteEmployee(employee: IGetAllEmployeeResponse) { 25 | return this.httpClient.delete(this.apiUrl + '/' + employee.id); 26 | } 27 | deleteEmp(id: number) { 28 | return this.httpClient.delete(this.apiUrl + '/' + id); 29 | } 30 | updateEmployee(id: number, employee: any) { 31 | return this.httpClient.put(this.apiUrl + '/' + id, employee); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/app/services/instructor/instructor.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { InstructorService } from './instructor.service'; 4 | 5 | describe('InstructorService', () => { 6 | let service: InstructorService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(InstructorService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/instructor/instructor.service.ts: -------------------------------------------------------------------------------- 1 | import { IUpdateInstructorRequest } from './../../models/request/instructor/updateInstructorRequest'; 2 | import { ICreateInstructorRequest } from './../../models/request/instructor/createInstructorRequest'; 3 | import { IGetInstructorResponse } from './../../models/response/instructor/getInstructorResponse'; 4 | import { IGetAllInstructorResponse } from 'src/app/models/response/instructor/getAllInstructorResponse'; 5 | import { Observable } from 'rxjs'; 6 | import { HttpClient } from '@angular/common/http'; 7 | import { Injectable } from '@angular/core'; 8 | 9 | @Injectable({ 10 | providedIn: 'root', 11 | }) 12 | export class InstructorService { 13 | apiUrl = 'http://localhost:3000/instructor'; 14 | constructor(private httpClient: HttpClient) {} 15 | 16 | getAllInstructor(): Observable { 17 | return this.httpClient.get(this.apiUrl); 18 | } 19 | 20 | getInstructor(id: number): Observable { 21 | return this.httpClient.get(this.apiUrl + '/' + id); 22 | } 23 | addInstructor(instructor: ICreateInstructorRequest) { 24 | return this.httpClient.post(this.apiUrl, instructor); 25 | } 26 | getUpdateInstructor(id: number) { 27 | return this.httpClient.get( 28 | this.apiUrl + '/' + id 29 | ); 30 | } 31 | updateInstructor(id: number, instructor: IUpdateInstructorRequest) { 32 | return this.httpClient.put(this.apiUrl + '/' + id, instructor); 33 | } 34 | // deleteInstructor(employee: IGetAllInstructorResponse) { 35 | // return this.httpClient.delete(this.apiUrl + '/' + employee.id); 36 | // } 37 | deleteInstructor(id: number) { 38 | return this.httpClient.delete(this.apiUrl + '/' + id); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/app/services/login-applicant/login-applicant.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginApplicantService } from './login-applicant.service'; 4 | 5 | describe('LoginApplicantService', () => { 6 | let service: LoginApplicantService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(LoginApplicantService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/login-applicant/login-applicant.service.ts: -------------------------------------------------------------------------------- 1 | import { LoginApplicantModel } from './../../models/token/login-applicant'; 2 | import { ITokenModel } from './../../models/token/tokenModel'; 3 | import { HttpClient } from '@angular/common/http'; 4 | import { Injectable } from '@angular/core'; 5 | 6 | @Injectable({ 7 | providedIn: 'root', 8 | }) 9 | export class LoginApplicantService { 10 | apiUrl: string = 'http://localhost:3000/applicant'; 11 | constructor(private httpClient: HttpClient) {} 12 | 13 | loginApplicant(user: LoginApplicantModel) { 14 | return this.httpClient.get( 15 | this.apiUrl + '/?email=' + user.email + '&password=' + user.password 16 | ); 17 | } 18 | 19 | isAuthenticated() { 20 | if (localStorage.getItem('token')) { 21 | return true; 22 | } else { 23 | return false; 24 | } 25 | } 26 | logout() { 27 | localStorage.clear(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/app/services/login-employee/login-employee.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginEmployeeService } from './login-employee.service'; 4 | 5 | describe('LoginEmployeeService', () => { 6 | let service: LoginEmployeeService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(LoginEmployeeService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/login-instructor/login-instructor.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginInstructorService } from './login-instructor.service'; 4 | 5 | describe('LoginInstructorService', () => { 6 | let service: LoginInstructorService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(LoginInstructorService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/login-instructor/login-instructor.service.ts: -------------------------------------------------------------------------------- 1 | import { ITokenModel } from './../../models/token/tokenModel'; 2 | import { LoginInstructorModel } from './../../models/token/login-instructor'; 3 | import { HttpClient } from '@angular/common/http'; 4 | import { Injectable } from '@angular/core'; 5 | 6 | @Injectable({ 7 | providedIn: 'root', 8 | }) 9 | export class LoginInstructorService { 10 | apiUrl = 'http://localhost:3000/instructor'; 11 | constructor(private httpClient: HttpClient) {} 12 | 13 | loginInstructor(user: LoginInstructorModel) { 14 | return this.httpClient.get( 15 | this.apiUrl + '/?email=' + user.email + '&password=' + user.password 16 | ); 17 | } 18 | isAuthenticated() { 19 | if (localStorage.getItem('token')) { 20 | return true; 21 | } else { 22 | return false; 23 | } 24 | } 25 | logout() { 26 | localStorage.clear(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/app/services/register/register.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed } from '@angular/core/testing'; 2 | 3 | import { RegisterService } from './register.service'; 4 | 5 | describe('RegisterService', () => { 6 | let service: RegisterService; 7 | 8 | beforeEach(() => { 9 | TestBed.configureTestingModule({}); 10 | service = TestBed.inject(RegisterService); 11 | }); 12 | 13 | it('should be created', () => { 14 | expect(service).toBeTruthy(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /src/app/services/register/register.service.ts: -------------------------------------------------------------------------------- 1 | import { GetUsers } from './../../models/token/users-model'; 2 | import { HttpClient } from '@angular/common/http'; 3 | import { Injectable } from '@angular/core'; 4 | 5 | @Injectable({ 6 | providedIn: 'root', 7 | }) 8 | export class RegisterService { 9 | apiUrl = 'http://localhost:3000/users'; 10 | constructor(private httpClient: HttpClient) {} 11 | 12 | addUsers(users: GetUsers) { 13 | return this.httpClient.post(this.apiUrl, users); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/assets/.gitkeep -------------------------------------------------------------------------------- /src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/favicon.ico -------------------------------------------------------------------------------- /src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | KodlamaioBootcampProject 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule) 12 | .catch(err => console.error(err)); 13 | -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/styles.css -------------------------------------------------------------------------------- /src/template/LICENSE.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/LICENSE.txt -------------------------------------------------------------------------------- /src/template/READ-ME.txt: -------------------------------------------------------------------------------- 1 | => Template Name : DASHMIN - Bootstrap Admin Template Free 2 | 3 | => Template Link : https://htmlcodex.com/bootstrap-admin-template-free 4 | 5 | => Template License : https://htmlcodex.com/license (or read the LICENSE.txt file) 6 | 7 | => Template Author : HTML Codex 8 | 9 | => Author Website : https://htmlcodex.com 10 | 11 | => About HTML Codex : HTML Codex is one of the top creators and publishers of Free HTML templates, HTML landing pages, HTML email templates and HTML snippets in the world. Read more at ( https://htmlcodex.com/about-us ) -------------------------------------------------------------------------------- /src/template/bootstrap-admin-template-free.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/bootstrap-admin-template-free.jpg -------------------------------------------------------------------------------- /src/template/img/testimonial-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/img/testimonial-1.jpg -------------------------------------------------------------------------------- /src/template/img/testimonial-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/img/testimonial-2.jpg -------------------------------------------------------------------------------- /src/template/img/user.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/img/user.jpg -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Owl 2 | Modified work Copyright 2016 David Deutsch 3 | 4 | Permission is hereby granted, free of charge, to any person 5 | obtaining a copy of this software and associated documentation 6 | files (the "Software"), to deal in the Software without 7 | restriction, including without limitation the rights to use, 8 | copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the 10 | Software is furnished to do so, subject to the following 11 | conditions: 12 | 13 | The above copyright notice and this permission notice shall be 14 | included in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 20 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 21 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 22 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 23 | OTHER DEALINGS IN THE SOFTWARE. 24 | -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/lib/owlcarousel/assets/ajax-loader.gif -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/owl.theme.default.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | /* 7 | * Default theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #869791; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #869791; } 51 | -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/owl.theme.default.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#869791} -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/owl.theme.green.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | /* 7 | * Green theme - Owl Carousel CSS File 8 | */ 9 | .owl-theme .owl-nav { 10 | margin-top: 10px; 11 | text-align: center; 12 | -webkit-tap-highlight-color: transparent; } 13 | .owl-theme .owl-nav [class*='owl-'] { 14 | color: #FFF; 15 | font-size: 14px; 16 | margin: 5px; 17 | padding: 4px 7px; 18 | background: #D6D6D6; 19 | display: inline-block; 20 | cursor: pointer; 21 | border-radius: 3px; } 22 | .owl-theme .owl-nav [class*='owl-']:hover { 23 | background: #4DC7A0; 24 | color: #FFF; 25 | text-decoration: none; } 26 | .owl-theme .owl-nav .disabled { 27 | opacity: 0.5; 28 | cursor: default; } 29 | 30 | .owl-theme .owl-nav.disabled + .owl-dots { 31 | margin-top: 10px; } 32 | 33 | .owl-theme .owl-dots { 34 | text-align: center; 35 | -webkit-tap-highlight-color: transparent; } 36 | .owl-theme .owl-dots .owl-dot { 37 | display: inline-block; 38 | zoom: 1; 39 | *display: inline; } 40 | .owl-theme .owl-dots .owl-dot span { 41 | width: 10px; 42 | height: 10px; 43 | margin: 5px 7px; 44 | background: #D6D6D6; 45 | display: block; 46 | -webkit-backface-visibility: visible; 47 | transition: opacity 200ms ease; 48 | border-radius: 30px; } 49 | .owl-theme .owl-dots .owl-dot.active span, .owl-theme .owl-dots .owl-dot:hover span { 50 | background: #4DC7A0; } 51 | -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/owl.theme.green.min.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Owl Carousel v2.2.1 3 | * Copyright 2013-2017 David Deutsch 4 | * Licensed under () 5 | */ 6 | .owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#4DC7A0;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}.owl-theme .owl-dots .owl-dot.active span,.owl-theme .owl-dots .owl-dot:hover span{background:#4DC7A0} -------------------------------------------------------------------------------- /src/template/lib/owlcarousel/assets/owl.video.play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasansaid/kodlamaioBootcampProject/7d920d80c5918dcaf3edfef038aee7c4213b6650/src/template/lib/owlcarousel/assets/owl.video.play.png -------------------------------------------------------------------------------- /src/template/lib/waypoints/links.php: -------------------------------------------------------------------------------- 1 | 'lib/waypoints/waypoints.min.js' 4 | ); 5 | ?> 6 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /******* Customized Bootstrap ********/ 2 | 3 | $primary: #009CFF; 4 | $light: #F3F6F9; 5 | $dark: #191C24; 6 | 7 | $font-family-base: 'Heebo', sans-serif; 8 | 9 | $body-bg: $light; 10 | 11 | $body-color: #757575; 12 | 13 | $headings-color: $dark; 14 | 15 | $headings-font-weight: 700; 16 | 17 | $enable-responsive-font-sizes: true; 18 | 19 | $border-radius: 5px; 20 | 21 | $link-decoration: none; 22 | 23 | $enable-negative-margins: true; 24 | 25 | @import "bootstrap/scss/bootstrap"; -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $alert-dismissible-padding-r; 31 | 32 | // Adjust close link position 33 | .btn-close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | z-index: $stretched-link-z-index + 1; 38 | padding: $alert-padding-y * 1.25 $alert-padding-x; 39 | } 40 | } 41 | 42 | 43 | // scss-docs-start alert-modifiers 44 | // Generate contextual modifier classes for colorizing the alert. 45 | 46 | @each $state, $value in $theme-colors { 47 | $alert-background: shift-color($value, $alert-bg-scale); 48 | $alert-border: shift-color($value, $alert-border-scale); 49 | $alert-color: shift-color($value, $alert-color-scale); 50 | @if (contrast-ratio($alert-background, $alert-color) < $min-contrast-ratio) { 51 | $alert-color: mix($value, color-contrast($alert-background), abs($alert-color-scale)); 52 | } 53 | .alert-#{$state} { 54 | @include alert-variant($alert-background, $alert-border, $alert-color); 55 | } 56 | } 57 | // scss-docs-end alert-modifiers 58 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | color: $badge-color; 13 | text-align: center; 14 | white-space: nowrap; 15 | vertical-align: baseline; 16 | @include border-radius($badge-border-radius); 17 | @include gradient-bg(); 18 | 19 | // Empty badges collapse automatically 20 | &:empty { 21 | display: none; 22 | } 23 | } 24 | 25 | // Quick fix for badges in buttons 26 | .btn .badge { 27 | position: relative; 28 | top: -1px; 29 | } 30 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | // The separator between breadcrumbs (by default, a forward-slash: "/") 14 | + .breadcrumb-item { 15 | padding-left: $breadcrumb-item-padding-x; 16 | 17 | &::before { 18 | float: left; // Suppress inline spacings and underlining of the separator 19 | padding-right: $breadcrumb-item-padding-x; 20 | color: $breadcrumb-divider-color; 21 | content: var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider)) #{"/* rtl:"} var(--#{$variable-prefix}breadcrumb-divider, escape-svg($breadcrumb-divider-flipped)) #{"*/"}; 22 | } 23 | } 24 | 25 | &.active { 26 | color: $breadcrumb-active-color; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_close.scss: -------------------------------------------------------------------------------- 1 | // transparent background and border properties included for button version. 2 | // iOS requires the button element instead of an anchor tag. 3 | // If you want the anchor version, it requires `href="#"`. 4 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 5 | 6 | .btn-close { 7 | box-sizing: content-box; 8 | width: $btn-close-width; 9 | height: $btn-close-height; 10 | padding: $btn-close-padding-y $btn-close-padding-x; 11 | color: $btn-close-color; 12 | background: transparent escape-svg($btn-close-bg) center / $btn-close-width auto no-repeat; // include transparent for button elements 13 | border: 0; // for button elements 14 | @include border-radius(); 15 | opacity: $btn-close-opacity; 16 | 17 | // Override 's hover style 18 | &:hover { 19 | color: $btn-close-color; 20 | text-decoration: none; 21 | opacity: $btn-close-hover-opacity; 22 | } 23 | 24 | &:focus { 25 | outline: 0; 26 | box-shadow: $btn-close-focus-shadow; 27 | opacity: $btn-close-focus-opacity; 28 | } 29 | 30 | &:disabled, 31 | &.disabled { 32 | pointer-events: none; 33 | user-select: none; 34 | opacity: $btn-close-disabled-opacity; 35 | } 36 | } 37 | 38 | .btn-close-white { 39 | filter: $btn-close-white-filter; 40 | } 41 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_containers.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-grid-classes { 6 | // Single container class with breakpoint max-widths 7 | .container, 8 | // 100% wide container at all breakpoints 9 | .container-fluid { 10 | @include make-container(); 11 | } 12 | 13 | // Responsive containers that are 100% wide until a breakpoint 14 | @each $breakpoint, $container-max-width in $container-max-widths { 15 | .container-#{$breakpoint} { 16 | @extend .container-fluid; 17 | } 18 | 19 | @include media-breakpoint-up($breakpoint, $grid-breakpoints) { 20 | %responsive-container-#{$breakpoint} { 21 | max-width: $container-max-width; 22 | } 23 | 24 | // Extend each breakpoint which is smaller or equal to the current breakpoint 25 | $extend-breakpoint: true; 26 | 27 | @each $name, $width in $grid-breakpoints { 28 | @if ($extend-breakpoint) { 29 | .container#{breakpoint-infix($name, $grid-breakpoints)} { 30 | @extend %responsive-container-#{$breakpoint}; 31 | } 32 | 33 | // Once the current breakpoint is reached, stop extending 34 | @if ($breakpoint == $name) { 35 | $extend-breakpoint: false; 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_forms.scss: -------------------------------------------------------------------------------- 1 | @import "forms/labels"; 2 | @import "forms/form-text"; 3 | @import "forms/form-control"; 4 | @import "forms/form-select"; 5 | @import "forms/form-check"; 6 | @import "forms/form-range"; 7 | @import "forms/floating-labels"; 8 | @import "forms/input-group"; 9 | @import "forms/validation"; 10 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Row 2 | // 3 | // Rows contain your columns. 4 | 5 | @if $enable-grid-classes { 6 | .row { 7 | @include make-row(); 8 | 9 | > * { 10 | @include make-col-ready(); 11 | } 12 | } 13 | } 14 | 15 | 16 | // Columns 17 | // 18 | // Common styles for small and large grid columns 19 | 20 | @if $enable-grid-classes { 21 | @include make-grid-columns(); 22 | } 23 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_helpers.scss: -------------------------------------------------------------------------------- 1 | @import "helpers/clearfix"; 2 | @import "helpers/colored-links"; 3 | @import "helpers/ratio"; 4 | @import "helpers/position"; 5 | @import "helpers/visually-hidden"; 6 | @import "helpers/stretched-link"; 7 | @import "helpers/text-truncation"; 8 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid(); 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: $spacer / 2; 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | @include font-size($figure-caption-font-size); 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Helpers 12 | @import "mixins/breakpoints"; 13 | @import "mixins/color-scheme"; 14 | @import "mixins/image"; 15 | @import "mixins/resize"; 16 | @import "mixins/visually-hidden"; 17 | @import "mixins/reset-text"; 18 | @import "mixins/text-truncate"; 19 | 20 | // Utilities 21 | @import "mixins/utilities"; 22 | 23 | // Components 24 | @import "mixins/alert"; 25 | @import "mixins/buttons"; 26 | @import "mixins/caret"; 27 | @import "mixins/pagination"; 28 | @import "mixins/lists"; 29 | @import "mixins/list-group"; 30 | @import "mixins/forms"; 31 | @import "mixins/table-variants"; 32 | 33 | // Skins 34 | @import "mixins/border-radius"; 35 | @import "mixins/box-shadow"; 36 | @import "mixins/gradients"; 37 | @import "mixins/transition"; 38 | 39 | // Layout 40 | @import "mixins/clearfix"; 41 | @import "mixins/container"; 42 | @import "mixins/grid"; 43 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_pagination.scss: -------------------------------------------------------------------------------- 1 | .pagination { 2 | display: flex; 3 | @include list-unstyled(); 4 | } 5 | 6 | .page-link { 7 | position: relative; 8 | display: block; 9 | color: $pagination-color; 10 | text-decoration: if($link-decoration == none, null, none); 11 | background-color: $pagination-bg; 12 | border: $pagination-border-width solid $pagination-border-color; 13 | @include transition($pagination-transition); 14 | 15 | &:hover { 16 | z-index: 2; 17 | color: $pagination-hover-color; 18 | text-decoration: if($link-hover-decoration == underline, none, null); 19 | background-color: $pagination-hover-bg; 20 | border-color: $pagination-hover-border-color; 21 | } 22 | 23 | &:focus { 24 | z-index: 3; 25 | color: $pagination-focus-color; 26 | background-color: $pagination-focus-bg; 27 | outline: $pagination-focus-outline; 28 | box-shadow: $pagination-focus-box-shadow; 29 | } 30 | } 31 | 32 | .page-item { 33 | &:not(:first-child) .page-link { 34 | margin-left: $pagination-margin-start; 35 | } 36 | 37 | &.active .page-link { 38 | z-index: 3; 39 | color: $pagination-active-color; 40 | @include gradient-bg($pagination-active-bg); 41 | border-color: $pagination-active-border-color; 42 | } 43 | 44 | &.disabled .page-link { 45 | color: $pagination-disabled-color; 46 | pointer-events: none; 47 | background-color: $pagination-disabled-bg; 48 | border-color: $pagination-disabled-border-color; 49 | } 50 | } 51 | 52 | 53 | // 54 | // Sizing 55 | // 56 | @include pagination-size($pagination-padding-y, $pagination-padding-x, null, $pagination-border-radius); 57 | 58 | .pagination-lg { 59 | @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $pagination-border-radius-lg); 60 | } 61 | 62 | .pagination-sm { 63 | @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $pagination-border-radius-sm); 64 | } 65 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_progress.scss: -------------------------------------------------------------------------------- 1 | // Disable animation if transitions are disabled 2 | 3 | // scss-docs-start progress-keyframes 4 | @if $enable-transitions { 5 | @keyframes progress-bar-stripes { 6 | 0% { background-position-x: $progress-height; } 7 | } 8 | } 9 | // scss-docs-end progress-keyframes 10 | 11 | .progress { 12 | display: flex; 13 | height: $progress-height; 14 | overflow: hidden; // force rounded corners by cropping it 15 | @include font-size($progress-font-size); 16 | background-color: $progress-bg; 17 | @include border-radius($progress-border-radius); 18 | @include box-shadow($progress-box-shadow); 19 | } 20 | 21 | .progress-bar { 22 | display: flex; 23 | flex-direction: column; 24 | justify-content: center; 25 | overflow: hidden; 26 | color: $progress-bar-color; 27 | text-align: center; 28 | white-space: nowrap; 29 | background-color: $progress-bar-bg; 30 | @include transition($progress-bar-transition); 31 | } 32 | 33 | .progress-bar-striped { 34 | @include gradient-striped(); 35 | background-size: $progress-height $progress-height; 36 | } 37 | 38 | @if $enable-transitions { 39 | .progress-bar-animated { 40 | animation: $progress-bar-animation-timing progress-bar-stripes; 41 | 42 | @if $enable-reduced-motion { 43 | @media (prefers-reduced-motion: reduce) { 44 | animation: none; 45 | } 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_root.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | // Custom variable values only support SassScript inside `#{}`. 3 | @each $color, $value in $colors { 4 | --#{$variable-prefix}#{$color}: #{$value}; 5 | } 6 | 7 | @each $color, $value in $theme-colors { 8 | --#{$variable-prefix}#{$color}: #{$value}; 9 | } 10 | 11 | // Use `inspect` for lists so that quoted items keep the quotes. 12 | // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 13 | --#{$variable-prefix}font-sans-serif: #{inspect($font-family-sans-serif)}; 14 | --#{$variable-prefix}font-monospace: #{inspect($font-family-monospace)}; 15 | --#{$variable-prefix}gradient: #{$gradient}; 16 | } 17 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_spinners.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Rotating border 3 | // 4 | 5 | // scss-docs-start spinner-border-keyframes 6 | @keyframes spinner-border { 7 | to { transform: rotate(360deg) #{"/* rtl:ignore */"}; } 8 | } 9 | // scss-docs-end spinner-border-keyframes 10 | 11 | .spinner-border { 12 | display: inline-block; 13 | width: $spinner-width; 14 | height: $spinner-height; 15 | vertical-align: $spinner-vertical-align; 16 | border: $spinner-border-width solid currentColor; 17 | border-right-color: transparent; 18 | // stylelint-disable-next-line property-disallowed-list 19 | border-radius: 50%; 20 | animation: $spinner-animation-speed linear infinite spinner-border; 21 | } 22 | 23 | .spinner-border-sm { 24 | width: $spinner-width-sm; 25 | height: $spinner-height-sm; 26 | border-width: $spinner-border-width-sm; 27 | } 28 | 29 | // 30 | // Growing circle 31 | // 32 | 33 | // scss-docs-start spinner-grow-keyframes 34 | @keyframes spinner-grow { 35 | 0% { 36 | transform: scale(0); 37 | } 38 | 50% { 39 | opacity: 1; 40 | transform: none; 41 | } 42 | } 43 | // scss-docs-end spinner-grow-keyframes 44 | 45 | .spinner-grow { 46 | display: inline-block; 47 | width: $spinner-width; 48 | height: $spinner-height; 49 | vertical-align: $spinner-vertical-align; 50 | background-color: currentColor; 51 | // stylelint-disable-next-line property-disallowed-list 52 | border-radius: 50%; 53 | opacity: 0; 54 | animation: $spinner-animation-speed linear infinite spinner-grow; 55 | } 56 | 57 | .spinner-grow-sm { 58 | width: $spinner-width-sm; 59 | height: $spinner-height-sm; 60 | } 61 | 62 | @if $enable-reduced-motion { 63 | @media (prefers-reduced-motion: reduce) { 64 | .spinner-border, 65 | .spinner-grow { 66 | animation-duration: $spinner-animation-speed * 2; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_toasts.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | width: $toast-max-width; 3 | max-width: 100%; 4 | @include font-size($toast-font-size); 5 | color: $toast-color; 6 | pointer-events: auto; 7 | background-color: $toast-background-color; 8 | background-clip: padding-box; 9 | border: $toast-border-width solid $toast-border-color; 10 | box-shadow: $toast-box-shadow; 11 | @include border-radius($toast-border-radius); 12 | 13 | &:not(.showing):not(.show) { 14 | opacity: 0; 15 | } 16 | 17 | &.hide { 18 | display: none; 19 | } 20 | } 21 | 22 | .toast-container { 23 | width: max-content; 24 | max-width: 100%; 25 | pointer-events: none; 26 | 27 | > :not(:last-child) { 28 | margin-bottom: $toast-spacing; 29 | } 30 | } 31 | 32 | .toast-header { 33 | display: flex; 34 | align-items: center; 35 | padding: $toast-padding-y $toast-padding-x; 36 | color: $toast-header-color; 37 | background-color: $toast-header-background-color; 38 | background-clip: padding-box; 39 | border-bottom: $toast-border-width solid $toast-header-border-color; 40 | @include border-top-radius(subtract($toast-border-radius, $toast-border-width)); 41 | 42 | .btn-close { 43 | margin-right: $toast-padding-x / -2; 44 | margin-left: $toast-padding-x; 45 | } 46 | } 47 | 48 | .toast-body { 49 | padding: $toast-padding-x; // apply to both vertical and horizontal 50 | word-wrap: break-word; 51 | } 52 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | @include transition($transition-fade); 3 | 4 | &:not(.show) { 5 | opacity: 0; 6 | } 7 | } 8 | 9 | // scss-docs-start collapse-classes 10 | .collapse { 11 | &:not(.show) { 12 | display: none; 13 | } 14 | } 15 | 16 | .collapsing { 17 | height: 0; 18 | overflow: hidden; 19 | @include transition($transition-collapse); 20 | } 21 | // scss-docs-end collapse-classes 22 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/_type.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Headings 3 | // 4 | .h1 { 5 | @extend h1; 6 | } 7 | 8 | .h2 { 9 | @extend h2; 10 | } 11 | 12 | .h3 { 13 | @extend h3; 14 | } 15 | 16 | .h4 { 17 | @extend h4; 18 | } 19 | 20 | .h5 { 21 | @extend h5; 22 | } 23 | 24 | .h6 { 25 | @extend h6; 26 | } 27 | 28 | 29 | .lead { 30 | @include font-size($lead-font-size); 31 | font-weight: $lead-font-weight; 32 | } 33 | 34 | // Type display classes 35 | @each $display, $font-size in $display-font-sizes { 36 | .display-#{$display} { 37 | @include font-size($font-size); 38 | font-weight: $display-font-weight; 39 | line-height: $display-line-height; 40 | } 41 | } 42 | 43 | // 44 | // Emphasis 45 | // 46 | .small { 47 | @extend small; 48 | } 49 | 50 | .mark { 51 | @extend mark; 52 | } 53 | 54 | // 55 | // Lists 56 | // 57 | 58 | .list-unstyled { 59 | @include list-unstyled(); 60 | } 61 | 62 | // Inline turns list items into inline-block 63 | .list-inline { 64 | @include list-unstyled(); 65 | } 66 | .list-inline-item { 67 | display: inline-block; 68 | 69 | &:not(:last-child) { 70 | margin-right: $list-inline-padding; 71 | } 72 | } 73 | 74 | 75 | // 76 | // Misc 77 | // 78 | 79 | // Builds on `abbr` 80 | .initialism { 81 | @include font-size($initialism-font-size); 82 | text-transform: uppercase; 83 | } 84 | 85 | // Blockquotes 86 | .blockquote { 87 | margin-bottom: $blockquote-margin-y; 88 | @include font-size($blockquote-font-size); 89 | 90 | > :last-child { 91 | margin-bottom: 0; 92 | } 93 | } 94 | 95 | .blockquote-footer { 96 | margin-top: -$blockquote-margin-y; 97 | margin-bottom: $blockquote-margin-y; 98 | @include font-size($blockquote-footer-font-size); 99 | color: $blockquote-footer-color; 100 | 101 | &::before { 102 | content: "\2014\00A0"; // em dash, nbsp 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | $include-column-box-sizing: true !default; 9 | 10 | @import "functions"; 11 | @import "variables"; 12 | 13 | @import "mixins/lists"; 14 | @import "mixins/breakpoints"; 15 | @import "mixins/container"; 16 | @import "mixins/grid"; 17 | @import "mixins/utilities"; 18 | 19 | @import "vendor/rfs"; 20 | 21 | @import "containers"; 22 | @import "grid"; 23 | 24 | @import "utilities"; 25 | // Only use the utilities we need 26 | // stylelint-disable-next-line scss/dollar-variable-default 27 | $utilities: map-get-multiple( 28 | $utilities, 29 | ( 30 | "display", 31 | "order", 32 | "flex", 33 | "flex-direction", 34 | "flex-grow", 35 | "flex-shrink", 36 | "flex-wrap", 37 | "justify-content", 38 | "align-items", 39 | "align-content", 40 | "align-self", 41 | "margin", 42 | "margin-x", 43 | "margin-y", 44 | "margin-top", 45 | "margin-end", 46 | "margin-bottom", 47 | "margin-start", 48 | "negative-margin", 49 | "negative-margin-x", 50 | "negative-margin-y", 51 | "negative-margin-top", 52 | "negative-margin-end", 53 | "negative-margin-bottom", 54 | "negative-margin-start", 55 | "padding", 56 | "padding-x", 57 | "padding-y", 58 | "padding-top", 59 | "padding-end", 60 | "padding-bottom", 61 | "padding-start", 62 | ) 63 | ); 64 | 65 | @import "utilities/api"; 66 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | // Prevent the usage of custom properties since we don't add them to `:root` in reboot 12 | $font-family-base: $font-family-sans-serif; // stylelint-disable-line scss/dollar-variable-default 13 | $font-family-code: $font-family-monospace; // stylelint-disable-line scss/dollar-variable-default 14 | @import "mixins"; 15 | @import "reboot"; 16 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/bootstrap-utilities.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Utilities v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // Configuration 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "utilities"; 13 | 14 | // Helpers 15 | @import "helpers"; 16 | 17 | // Utilities 18 | @import "utilities/api"; 19 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.0.0 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors 4 | * Copyright 2011-2021 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | // scss-docs-start import-stack 9 | // Configuration 10 | @import "functions"; 11 | @import "variables"; 12 | @import "mixins"; 13 | @import "utilities"; 14 | 15 | // Layout & components 16 | @import "root"; 17 | @import "reboot"; 18 | @import "type"; 19 | @import "images"; 20 | @import "containers"; 21 | @import "grid"; 22 | @import "tables"; 23 | @import "forms"; 24 | @import "buttons"; 25 | @import "transitions"; 26 | @import "dropdown"; 27 | @import "button-group"; 28 | @import "nav"; 29 | @import "navbar"; 30 | @import "card"; 31 | @import "accordion"; 32 | @import "breadcrumb"; 33 | @import "pagination"; 34 | @import "badge"; 35 | @import "alert"; 36 | @import "progress"; 37 | @import "list-group"; 38 | @import "close"; 39 | @import "toasts"; 40 | @import "modal"; 41 | @import "tooltip"; 42 | @import "popover"; 43 | @import "carousel"; 44 | @import "spinners"; 45 | @import "offcanvas"; 46 | 47 | // Helpers 48 | @import "helpers"; 49 | 50 | // Utilities 51 | @import "utilities/api"; 52 | // scss-docs-end import-stack 53 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/forms/_form-text.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Form text 3 | // 4 | 5 | .form-text { 6 | margin-top: $form-text-margin-top; 7 | @include font-size($form-text-font-size); 8 | font-style: $form-text-font-style; 9 | font-weight: $form-text-font-weight; 10 | color: $form-text-color; 11 | } 12 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/forms/_labels.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Labels 3 | // 4 | 5 | .form-label { 6 | margin-bottom: $form-label-margin-bottom; 7 | @include font-size($form-label-font-size); 8 | font-style: $form-label-font-style; 9 | font-weight: $form-label-font-weight; 10 | color: $form-label-color; 11 | } 12 | 13 | // For use with horizontal and inline forms, when you need the label (or legend) 14 | // text to align with the form controls. 15 | .col-form-label { 16 | padding-top: add($input-padding-y, $input-border-width); 17 | padding-bottom: add($input-padding-y, $input-border-width); 18 | margin-bottom: 0; // Override the `` default 19 | @include font-size(inherit); // Override the `` default 20 | font-style: $form-label-font-style; 21 | font-weight: $form-label-font-weight; 22 | line-height: $input-line-height; 23 | color: $form-label-color; 24 | } 25 | 26 | .col-form-label-lg { 27 | padding-top: add($input-padding-y-lg, $input-border-width); 28 | padding-bottom: add($input-padding-y-lg, $input-border-width); 29 | @include font-size($input-font-size-lg); 30 | } 31 | 32 | .col-form-label-sm { 33 | padding-top: add($input-padding-y-sm, $input-border-width); 34 | padding-bottom: add($input-padding-y-sm, $input-border-width); 35 | @include font-size($input-font-size-sm); 36 | } 37 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/forms/_validation.scss: -------------------------------------------------------------------------------- 1 | // Form validation 2 | // 3 | // Provide feedback to users when form field values are valid or invalid. Works 4 | // primarily for client-side validation via scoped `:invalid` and `:valid` 5 | // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for 6 | // server-side validation. 7 | 8 | // scss-docs-start form-validation-states-loop 9 | @each $state, $data in $form-validation-states { 10 | @include form-validation-state($state, $data...); 11 | } 12 | // scss-docs-end form-validation-states-loop 13 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_colored-links.scss: -------------------------------------------------------------------------------- 1 | @each $color, $value in $theme-colors { 2 | .link-#{$color} { 3 | color: $value; 4 | 5 | @if $link-shade-percentage != 0 { 6 | &:hover, 7 | &:focus { 8 | color: if(color-contrast($value) == $color-contrast-light, shade-color($value, $link-shade-percentage), tint-color($value, $link-shade-percentage)); 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_position.scss: -------------------------------------------------------------------------------- 1 | // Shorthand 2 | 3 | .fixed-top { 4 | position: fixed; 5 | top: 0; 6 | right: 0; 7 | left: 0; 8 | z-index: $zindex-fixed; 9 | } 10 | 11 | .fixed-bottom { 12 | position: fixed; 13 | right: 0; 14 | bottom: 0; 15 | left: 0; 16 | z-index: $zindex-fixed; 17 | } 18 | 19 | // Responsive sticky top 20 | @each $breakpoint in map-keys($grid-breakpoints) { 21 | @include media-breakpoint-up($breakpoint) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | .sticky#{$infix}-top { 25 | position: sticky; 26 | top: 0; 27 | z-index: $zindex-sticky; 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_ratio.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .ratio { 4 | position: relative; 5 | width: 100%; 6 | 7 | &::before { 8 | display: block; 9 | padding-top: var(--#{$variable-prefix}aspect-ratio); 10 | content: ""; 11 | } 12 | 13 | > * { 14 | position: absolute; 15 | top: 0; 16 | left: 0; 17 | width: 100%; 18 | height: 100%; 19 | } 20 | } 21 | 22 | @each $key, $ratio in $aspect-ratios { 23 | .ratio-#{$key} { 24 | --#{$variable-prefix}aspect-ratio: #{$ratio}; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::#{$stretched-link-pseudo-element} { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: $stretched-link-z-index; 13 | content: ""; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_text-truncation.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Text truncation 3 | // 4 | 5 | .text-truncate { 6 | @include text-truncate(); 7 | } 8 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/helpers/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Visually hidden 3 | // 4 | 5 | .visually-hidden, 6 | .visually-hidden-focusable:not(:focus):not(:focus-within) { 7 | @include visually-hidden(); 8 | } 9 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start alert-variant-mixin 2 | @mixin alert-variant($background, $border, $color) { 3 | color: $color; 4 | @include gradient-bg($background); 5 | border-color: $border; 6 | 7 | .alert-link { 8 | color: shade-color($color, 20%); 9 | } 10 | } 11 | // scss-docs-end alert-variant-mixin 12 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @each $value in $shadow { 6 | @if $value != null { 7 | $result: append($result, $value, "comma"); 8 | } 9 | @if $value == none and length($shadow) > 1 { 10 | @warn "The keyword 'none' must be used as a single argument."; 11 | } 12 | } 13 | 14 | @if (length($result) > 0) { 15 | box-shadow: $result; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start caret-mixins 2 | @mixin caret-down { 3 | border-top: $caret-width solid; 4 | border-right: $caret-width solid transparent; 5 | border-bottom: 0; 6 | border-left: $caret-width solid transparent; 7 | } 8 | 9 | @mixin caret-up { 10 | border-top: 0; 11 | border-right: $caret-width solid transparent; 12 | border-bottom: $caret-width solid; 13 | border-left: $caret-width solid transparent; 14 | } 15 | 16 | @mixin caret-end { 17 | border-top: $caret-width solid transparent; 18 | border-right: 0; 19 | border-bottom: $caret-width solid transparent; 20 | border-left: $caret-width solid; 21 | } 22 | 23 | @mixin caret-start { 24 | border-top: $caret-width solid transparent; 25 | border-right: $caret-width solid; 26 | border-bottom: $caret-width solid transparent; 27 | } 28 | 29 | @mixin caret($direction: down) { 30 | @if $enable-caret { 31 | &::after { 32 | display: inline-block; 33 | margin-left: $caret-spacing; 34 | vertical-align: $caret-vertical-align; 35 | content: ""; 36 | @if $direction == down { 37 | @include caret-down(); 38 | } @else if $direction == up { 39 | @include caret-up(); 40 | } @else if $direction == end { 41 | @include caret-end(); 42 | } 43 | } 44 | 45 | @if $direction == start { 46 | &::after { 47 | display: none; 48 | } 49 | 50 | &::before { 51 | display: inline-block; 52 | margin-right: $caret-spacing; 53 | vertical-align: $caret-vertical-align; 54 | content: ""; 55 | @include caret-start(); 56 | } 57 | } 58 | 59 | &:empty::after { 60 | margin-left: 0; 61 | } 62 | } 63 | } 64 | // scss-docs-end caret-mixins 65 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start clearfix 2 | @mixin clearfix() { 3 | &::after { 4 | display: block; 5 | clear: both; 6 | content: ""; 7 | } 8 | } 9 | // scss-docs-end clearfix 10 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_color-scheme.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start mixin-color-scheme 2 | @mixin color-scheme($name) { 3 | @media (prefers-color-scheme: #{$name}) { 4 | @content; 5 | } 6 | } 7 | // scss-docs-end mixin-color-scheme 8 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_container.scss: -------------------------------------------------------------------------------- 1 | // Container mixins 2 | 3 | @mixin make-container($gutter: $container-padding-x) { 4 | width: 100%; 5 | padding-right: var(--#{$variable-prefix}gutter-x, #{$gutter}); 6 | padding-left: var(--#{$variable-prefix}gutter-x, #{$gutter}); 7 | margin-right: auto; 8 | margin-left: auto; 9 | } 10 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | // scss-docs-start list-group-mixin 4 | @mixin list-group-item-variant($state, $background, $color) { 5 | .list-group-item-#{$state} { 6 | color: $color; 7 | background-color: $background; 8 | 9 | &.list-group-item-action { 10 | &:hover, 11 | &:focus { 12 | color: $color; 13 | background-color: shade-color($background, 10%); 14 | } 15 | 16 | &.active { 17 | color: $white; 18 | background-color: $color; 19 | border-color: $color; 20 | } 21 | } 22 | } 23 | } 24 | // scss-docs-end list-group-mixin 25 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | // scss-docs-start pagination-mixin 4 | @mixin pagination-size($padding-y, $padding-x, $font-size, $border-radius) { 5 | .page-link { 6 | padding: $padding-y $padding-x; 7 | @include font-size($font-size); 8 | } 9 | 10 | .page-item { 11 | @if $pagination-margin-start == (-$pagination-border-width) { 12 | &:first-child { 13 | .page-link { 14 | @include border-start-radius($border-radius); 15 | } 16 | } 17 | 18 | &:last-child { 19 | .page-link { 20 | @include border-end-radius($border-radius); 21 | } 22 | } 23 | } @else { 24 | //Add border-radius to all pageLinks in case they have left margin 25 | .page-link { 26 | @include border-radius($border-radius); 27 | } 28 | } 29 | } 30 | } 31 | // scss-docs-end pagination-mixin 32 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or overflow-wrap / word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_table-variants.scss: -------------------------------------------------------------------------------- 1 | // scss-docs-start table-variant 2 | @mixin table-variant($state, $background) { 3 | .table-#{$state} { 4 | $color: color-contrast(opaque($body-bg, $background)); 5 | $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); 6 | $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); 7 | $active-bg: mix($color, $background, percentage($table-active-bg-factor)); 8 | 9 | --#{$variable-prefix}table-bg: #{$background}; 10 | --#{$variable-prefix}table-striped-bg: #{$striped-bg}; 11 | --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)}; 12 | --#{$variable-prefix}table-active-bg: #{$active-bg}; 13 | --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)}; 14 | --#{$variable-prefix}table-hover-bg: #{$hover-bg}; 15 | --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)}; 16 | 17 | color: $color; 18 | border-color: mix($color, $background, percentage($table-border-factor)); 19 | } 20 | } 21 | // scss-docs-end table-variant 22 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | @mixin transition($transition...) { 3 | @if length($transition) == 0 { 4 | $transition: $transition-base; 5 | } 6 | 7 | @if length($transition) > 1 { 8 | @each $value in $transition { 9 | @if $value == null or $value == none { 10 | @warn "The keyword 'none' or 'null' must be used as a single argument."; 11 | } 12 | } 13 | } 14 | 15 | @if $enable-transitions { 16 | @if nth($transition, 1) != null { 17 | transition: $transition; 18 | } 19 | 20 | @if $enable-reduced-motion and nth($transition, 1) != null and nth($transition, 1) != none { 21 | @media (prefers-reduced-motion: reduce) { 22 | transition: none; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/mixins/_visually-hidden.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Hide content visually while keeping it accessible to assistive technologies 4 | // 5 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 6 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 7 | 8 | @mixin visually-hidden() { 9 | position: absolute !important; 10 | width: 1px !important; 11 | height: 1px !important; 12 | padding: 0 !important; 13 | margin: -1px !important; // Fix for https://github.com/twbs/bootstrap/issues/25686 14 | overflow: hidden !important; 15 | clip: rect(0, 0, 0, 0) !important; 16 | white-space: nowrap !important; 17 | border: 0 !important; 18 | } 19 | 20 | // Use to only display content when it's focused, or one of its child elements is focused 21 | // (i.e. when focus is within the element/container that the class was applied to) 22 | // 23 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 24 | 25 | @mixin visually-hidden-focusable() { 26 | &:not(:focus):not(:focus-within) { 27 | @include visually-hidden(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/template/scss/bootstrap/scss/utilities/_api.scss: -------------------------------------------------------------------------------- 1 | // Loop over each breakpoint 2 | @each $breakpoint in map-keys($grid-breakpoints) { 3 | 4 | // Generate media query if needed 5 | @include media-breakpoint-up($breakpoint) { 6 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 7 | 8 | // Loop over each utility property 9 | @each $key, $utility in $utilities { 10 | // The utility can be disabled with `false`, thus check if the utility is a map first 11 | // Only proceed if responsive media queries are enabled or if it's the base media query 12 | @if type-of($utility) == "map" and (map-get($utility, responsive) or $infix == "") { 13 | @include generate-utility($utility, $infix); 14 | } 15 | } 16 | } 17 | } 18 | 19 | // RFS rescaling 20 | @media (min-width: $rfs-mq-value) { 21 | @each $breakpoint in map-keys($grid-breakpoints) { 22 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 23 | 24 | @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) { 25 | // Loop over each utility property 26 | @each $key, $utility in $utilities { 27 | // The utility can be disabled with `false`, thus check if the utility is a map first 28 | // Only proceed if responsive media queries are enabled or if it's the base media query 29 | @if type-of($utility) == "map" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == "") { 30 | @include generate-utility($utility, $infix, true); 31 | } 32 | } 33 | } 34 | } 35 | } 36 | 37 | 38 | // Print utilities 39 | @media print { 40 | @each $key, $utility in $utilities { 41 | // The utility can be disabled with `false`, thus check if the utility is a map first 42 | // Then check if the utility needs print styles 43 | @if type-of($utility) == "map" and map-get($utility, print) == true { 44 | @include generate-utility($utility, "-print"); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/template/sd/carousel.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function () { 2 | $(".testimonial .indicators li").click(function () { 3 | var i = $(this).index(); 4 | var targetElement = $(".testimonial .tabs li"); 5 | targetElement.eq(i).addClass("active"); 6 | targetElement.not(targetElement[i]).removeClass("active"); 7 | }); 8 | $(".testimonial .tabs li").click(function () { 9 | var targetElement = $(".testimonial .tabs li"); 10 | targetElement.addClass("active"); 11 | targetElement.not($(this)).removeClass("active"); 12 | }); 13 | }); 14 | $(document).ready(function () { 15 | $(".slider .swiper-pagination span").each(function (i) { 16 | $(this) 17 | .text(i + 1) 18 | .prepend("0"); 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | (id: string): T; 13 | keys(): string[]; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting(), 21 | ); 22 | 23 | // Then we find all the tests. 24 | const context = require.context('./', true, /\.spec\.ts$/); 25 | // And load the modules. 26 | context.keys().forEach(context); 27 | -------------------------------------------------------------------------------- /tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": [] 7 | }, 8 | "files": [ 9 | "src/main.ts", 10 | "src/polyfills.ts" 11 | ], 12 | "include": [ 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": false, 9 | "noImplicitOverride": true, 10 | "noPropertyAccessFromIndexSignature": true, 11 | "noImplicitReturns": true, 12 | "noFallthroughCasesInSwitch": true, 13 | "sourceMap": true, 14 | "declaration": false, 15 | "downlevelIteration": true, 16 | "experimentalDecorators": true, 17 | "moduleResolution": "node", 18 | "importHelpers": true, 19 | "target": "es2020", 20 | "module": "es2020", 21 | "lib": ["es2020", "dom"] 22 | }, 23 | "angularCompilerOptions": { 24 | "enableI18nLegacyMessageIdFormat": false, 25 | "strictInjectionParameters": true, 26 | "strictInputAccessModifiers": true, 27 | "strictTemplates": true 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | --------------------------------------------------------------------------------