diff --git a/job_portal/accounts/__init__.py b/job_portal/accounts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/job_portal/accounts/__pycache__/__init__.cpython-38.pyc b/job_portal/accounts/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..ef1b528 Binary files /dev/null and b/job_portal/accounts/__pycache__/__init__.cpython-38.pyc differ diff --git a/job_portal/accounts/__pycache__/admin.cpython-38.pyc b/job_portal/accounts/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000..5433489 Binary files /dev/null and b/job_portal/accounts/__pycache__/admin.cpython-38.pyc differ diff --git a/job_portal/accounts/__pycache__/models.cpython-38.pyc b/job_portal/accounts/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000..de814e7 Binary files /dev/null and b/job_portal/accounts/__pycache__/models.cpython-38.pyc differ diff --git a/job_portal/accounts/__pycache__/urls.cpython-38.pyc b/job_portal/accounts/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..bb98d84 Binary files /dev/null and b/job_portal/accounts/__pycache__/urls.cpython-38.pyc differ diff --git a/job_portal/accounts/__pycache__/views.cpython-38.pyc b/job_portal/accounts/__pycache__/views.cpython-38.pyc new file mode 100644 index 0000000..f1efe63 Binary files /dev/null and b/job_portal/accounts/__pycache__/views.cpython-38.pyc differ diff --git a/job_portal/accounts/admin.py b/job_portal/accounts/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/job_portal/accounts/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/job_portal/accounts/apps.py b/job_portal/accounts/apps.py new file mode 100644 index 0000000..9b3fc5a --- /dev/null +++ b/job_portal/accounts/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AccountsConfig(AppConfig): + name = 'accounts' diff --git a/job_portal/accounts/migrations/__init__.py b/job_portal/accounts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/job_portal/accounts/migrations/__pycache__/__init__.cpython-38.pyc b/job_portal/accounts/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..3a93c8d Binary files /dev/null and b/job_portal/accounts/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/job_portal/accounts/models.py b/job_portal/accounts/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/job_portal/accounts/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/job_portal/accounts/tests.py b/job_portal/accounts/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/job_portal/accounts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/job_portal/accounts/urls.py b/job_portal/accounts/urls.py new file mode 100644 index 0000000..5808fa3 --- /dev/null +++ b/job_portal/accounts/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns =[ + path('signup/', views.SignUpView.as_view(), name="signup"), +] \ No newline at end of file diff --git a/job_portal/accounts/views.py b/job_portal/accounts/views.py new file mode 100644 index 0000000..9aefdcb --- /dev/null +++ b/job_portal/accounts/views.py @@ -0,0 +1,11 @@ +from django.shortcuts import render + +# Create your views here. +from django.contrib.auth.forms import UserCreationForm +from django.urls import reverse_lazy +from django.views import generic + +class SignUpView(generic.CreateView): + form_class = UserCreationForm + success_url = reverse_lazy('login') + template_name = 'signup.html' \ No newline at end of file diff --git a/job_portal/db.sqlite3 b/job_portal/db.sqlite3 index e69de29..92f2ecb 100644 Binary files a/job_portal/db.sqlite3 and b/job_portal/db.sqlite3 differ diff --git a/job_portal/general/static/general/about/main.css b/job_portal/general/static/general/about/main.css new file mode 100644 index 0000000..e24d9ad --- /dev/null +++ b/job_portal/general/static/general/about/main.css @@ -0,0 +1,260 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body, +html { + height: 100%; + width: 100%; + + font-family: "Open Sans", sans-serif; + font-size: 14px; + font-weight: 400; + line-height: 26px; + overflow-wrap: break-word; + word-break: normal; +} + +/* header starts */ + +header { + /* background: #2d2d7f !important; */ + background-image: url("https://images.unsplash.com/photo-1541746972996-4e0b0f43e02a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=60"); + background-repeat: no-repeat; + background-attachment: fixed; + background-size: 100% 100%; +} + +/* main-header start */ + +[data-target="#mainMenu"] { + position: relative; + z-index: 999; +} + +#mainMenu li > a { + font-size: 16px; + letter-spacing: 1px; + color: #fff; + font-weight: 400; + /* position relative to its previous postion */ + position: relative; + z-index: 1; + text-decoration: none; +} + +.main-header.fixed-nav #mainMenu li > a { + color: #fff; + text-decoration: none; +} + +#mainMenu li:not(:last-of-type) { + margin-right: 30px; +} + +#mainMenu li > a::before { + position: absolute; + content: ""; + width: calc(100% - 1px); + height: 1px; + background: #fff; + bottom: -6px; + left: 0; + -webkit-transform: scale(0, 1); + -ms-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + z-index: -1; + -webkit-transition: transform 0.5s ease; + transition: transform 0.5s ease; +} + +#mainMenu li > a:hover::before, +#mainMenu li > a.active::before { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; +} + +.main-header.fixed-nav #mainMenu li > a::before { + background: #000; +} + +.main-header { + position: relative; + left: 0; + z-index: 99; + width: 100%; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.main-header.fixed-nav { + top: 0; + background: #fff; + -webkit-box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + + + +/* main-header end */ + +@media (max-width: 991px) { + /*header starts*/ + .collapse.in { + display: block !important; + padding: 0; + clear: both; + } + .navbar-toggler { + margin: 0; + padding: 0; + width: 40px; + height: 30px; + position: static; + margin-top: 10px; + border: none; + border-radius: 0; + outline: none !important; + } + .main-header { + padding-top: 10px; + } + .main-header .navbar { + float: none; + width: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + } + .main-header .navbar-nav { + margin-top: 50px; + text-align: initial; + } + .main-header .navbar-nav li .nav-link { + text-align: center; + padding: 20px 15px; + border-radius: 0px; + } + /**/ + .main-header .navbar-toggler .icon-bar { + background-color: #fff; + margin: 0 auto 6px; + border-radius: 0; + width: 30px; + height: 3px; + position: absolute; + right: 0; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + } + .main-header .navbar .navbar-toggler .icon-bar:first-child { + margin-top: 3px; + } + .main-header .navbar-toggler .icon-bar-1 { + width: 10px; + top: 0px; + } + .main-header .navbar-toggler .icon-bar-2 { + width: 16px; + top: 12px; + } + .main-header .navbar-toggler .icon-bar-3 { + width: 20px; + top: 21px; + } + .main-header .current .icon-bar { + margin-bottom: 5px; + border-radius: 0; + display: block; + } + .main-header .current .icon-bar-1 { + width: 18px; + } + .main-header .current .icon-bar-2 { + width: 30px; + } + .main-header .current .icon-bar-3 { + width: 10px; + } + .main-header .navbar-toggler:hover .icon-bar { + background-color: #fff; + } + .main-header .navbar-toggler:focus .icon-bar { + background-color: #fff; + } + /*header ends*/ + #mainMenu li { + width: 200px; + text-align: left; + margin-left: 20%; + margin-bottom: 10px; + } +} + +/* Dropdown Content (Hidden by Default) */ + +.dropdown-content { + display: none; + position: absolute; + background-color: #f1f1f1; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Links inside the dropdown */ + +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ + +.dropdown-content a:hover { + background-color: #ddd; +} + +/* Show the dropdown menu on hover */ + +.dropdown:hover .dropdown-content { + display: block; + margin-left: 50%; +} + +/* header ends */ + + +/* footer starts */ + +.page-footer { + background: #272727; +} + +.icon_name { + padding-left: 10px; + cursor: pointer; +} + +.icon_name:hover { + color: #00ff00; +} + +.dark-grey-text { + color: #fff; +} + +/* footer ends */ \ No newline at end of file diff --git a/job_portal/general/static/general/general-landing-page/images/2.jpg b/job_portal/general/static/general/general-landing-page/images/2.jpg new file mode 100644 index 0000000..35a6df2 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/2.jpg differ diff --git a/job_portal/general/static/general/general-landing-page/images/alert.svg b/job_portal/general/static/general/general-landing-page/images/alert.svg new file mode 100644 index 0000000..7ce996a --- /dev/null +++ b/job_portal/general/static/general/general-landing-page/images/alert.svg @@ -0,0 +1 @@ +alert \ No newline at end of file diff --git a/job_portal/general/static/general/general-landing-page/images/confirmed.svg b/job_portal/general/static/general/general-landing-page/images/confirmed.svg new file mode 100644 index 0000000..2302441 --- /dev/null +++ b/job_portal/general/static/general/general-landing-page/images/confirmed.svg @@ -0,0 +1 @@ +confirmed \ No newline at end of file diff --git a/job_portal/general/static/general/general-landing-page/images/discord1.png b/job_portal/general/static/general/general-landing-page/images/discord1.png new file mode 100644 index 0000000..fb6a4b4 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/discord1.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/facebook2.png b/job_portal/general/static/general/general-landing-page/images/facebook2.png new file mode 100644 index 0000000..517d50a Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/facebook2.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/github2.png b/job_portal/general/static/general/general-landing-page/images/github2.png new file mode 100644 index 0000000..9c9e6f1 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/github2.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/google1.png b/job_portal/general/static/general/general-landing-page/images/google1.png new file mode 100644 index 0000000..750c9da Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/google1.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/instagram1.png b/job_portal/general/static/general/general-landing-page/images/instagram1.png new file mode 100644 index 0000000..4b9a229 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/instagram1.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/linkedIn1.png b/job_portal/general/static/general/general-landing-page/images/linkedIn1.png new file mode 100644 index 0000000..0e55cff Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/linkedIn1.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/mail.svg b/job_portal/general/static/general/general-landing-page/images/mail.svg new file mode 100644 index 0000000..08bd4b4 --- /dev/null +++ b/job_portal/general/static/general/general-landing-page/images/mail.svg @@ -0,0 +1 @@ +mail_2 \ No newline at end of file diff --git a/job_portal/general/static/general/general-landing-page/images/twitter2.png b/job_portal/general/static/general/general-landing-page/images/twitter2.png new file mode 100644 index 0000000..0994da7 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/twitter2.png differ diff --git a/job_portal/general/static/general/general-landing-page/images/youtube2.png b/job_portal/general/static/general/general-landing-page/images/youtube2.png new file mode 100644 index 0000000..2766de4 Binary files /dev/null and b/job_portal/general/static/general/general-landing-page/images/youtube2.png differ diff --git a/job_portal/general/static/general/general-landing-page/main.js b/job_portal/general/static/general/general-landing-page/main.js new file mode 100644 index 0000000..323fc56 --- /dev/null +++ b/job_portal/general/static/general/general-landing-page/main.js @@ -0,0 +1,109 @@ +// Testimonials +const authorsEl = document.querySelectorAll('.author'); +const container = document.querySelector('.testimonials-container'); +const nameEl = document.querySelector('.name'); +const textEl = document.querySelector('.text'); + +const testimonials = [{ + text: 'I had my concerns that due to a tight deadline this project can\'t be done. But Florin proved me wrong not only he delivered an outstanding work but he managed to deliver 1 day prior to the deadline. And when I asked for some revisions he made them in MINUTES. I\'m looking forward to work with him again and I totally recommend him. Thanks again Florin!', + name: 'Arthur Birnbaum', + color: 'rgba(75, 123, 236,1.0)' +},{ + text: 'Second time hiring him. Finished everything in a timely manner and his work is excellent. Can\'t recommend him enough.', + name: 'Phoebe Kotliar', + color: 'rgba(250, 130, 49,1.0)' +},{ + text: 'Alexandru Florin never fails to impress me by the quality of his work and delivering on time. When it comes to front-end, he is definitely my go to guy. Always is a pleasure to work with Alexandru even when deadlines are tight and pressure is great. It\'s reassuring to have a project in such good hands.', + name: 'Louisa P. Huard', + color: 'rgba(235, 59, 90,1.0)' +},{ + text: 'Florin has been of great help on our different web projects. He is very trustworthy and serious in the work done. Keep on the good work and energy, been a pleasure to collaborate.', + name: 'Cristina Aurmoogum', + color: 'rgba(165, 94, 234,1.0)' +},{ + text: 'I hired Florin Pop based on others positive experiences, and I understand why he\'s so highly rated. His code is very clean, he communicates well, and he likes to offer alternative solutions.', + name: 'J. Kent Pepper', + color: 'rgba(32, 191, 107,1.0)' +}]; + +addTestimonial(0); + +authorsEl.forEach((author, idx) => { + author.addEventListener('click', (e) => { + addTestimonial(idx); + author.classList.add('selected'); + }) +}); + +function addTestimonial(idx) { + const testimonial = testimonials[idx]; + + nameEl.innerHTML = testimonial.name; + textEl.innerHTML = testimonial.text; + container.style.background = testimonial.color; + container.style.boxShadow = `0 20px 10px -20px ${testimonial.color.substring(0, testimonial.color.length-4)}0.9)`; + + authorsEl.forEach(author => { + author.classList.remove('selected'); + }); +} +// End + +// Typing Effect +var TxtType = function(el, toRotate, period) { + this.toRotate = toRotate; + this.el = el; + this.loopNum = 0; + this.period = parseInt(period, 10) || 2000; + this.txt = ''; + this.tick(); + this.isDeleting = false; + }; + + TxtType.prototype.tick = function() { + var i = this.loopNum % this.toRotate.length; + var fullTxt = this.toRotate[i]; + + if (this.isDeleting) { + this.txt = fullTxt.substring(0, this.txt.length - 1); + } else { + this.txt = fullTxt.substring(0, this.txt.length + 1); + } + + this.el.innerHTML = ''+this.txt+''; + + var that = this; + var delta = 200 - Math.random() * 100; + + if (this.isDeleting) { delta /= 2; } + + if (!this.isDeleting && this.txt === fullTxt) { + delta = this.period; + this.isDeleting = true; + } else if (this.isDeleting && this.txt === '') { + this.isDeleting = false; + this.loopNum++; + delta = 500; + } + + setTimeout(function() { + that.tick(); + }, delta); + }; + + window.onload = function() { + var elements = document.getElementsByClassName('typewrite'); + for (var i=0; i a { + font-size: 16px; + letter-spacing: 1px; + color: #fff; + font-weight: 400; + /* position relative to its previous postion */ + position: relative; + z-index: 1; + text-decoration: none; +} + +.main-header.fixed-nav #mainMenu li > a { + color: #fff; + text-decoration: none; +} + +#mainMenu li:not(:last-of-type) { + margin-right: 30px; +} + +#mainMenu li > a::before { + position: absolute; + content: ""; + width: calc(100% - 1px); + height: 1px; + background: #fff; + bottom: -6px; + left: 0; + -webkit-transform: scale(0, 1); + -ms-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + z-index: -1; + -webkit-transition: transform 0.5s ease; + transition: transform 0.5s ease; +} + +#mainMenu li > a:hover::before, +#mainMenu li > a.active::before { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; +} + +.main-header.fixed-nav #mainMenu li > a::before { + background: #000; +} + +.main-header { + position: relative; + left: 0; + z-index: 99; + width: 100%; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.main-header.fixed-nav { + top: 0; + background: #fff; + -webkit-box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +@media (max-width: 991px) { + .collapse.in { + display: block !important; + padding: 0; + clear: both; + } + + .navbar-toggler { + margin: 0; + padding: 0; + width: 40px; + height: 30px; + position: static; + margin-top: 10px; + border: none; + border-radius: 0; + outline: none !important; + } + + .main-header { + padding-top: 10px; + } + + .main-header .navbar { + float: none; + width: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + } + + .main-header .navbar-nav { + margin-top: 50px; + text-align: initial; + } + + .main-header .navbar-nav li .nav-link { + text-align: center; + padding: 20px 15px; + border-radius: 0px; + } + + .main-header .navbar-toggler .icon-bar { + background-color: #fff; + margin: 0 auto 6px; + border-radius: 0; + width: 30px; + height: 3px; + position: absolute; + right: 0; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + } + + .main-header .navbar .navbar-toggler .icon-bar:first-child { + margin-top: 3px; + } + + .main-header .navbar-toggler .icon-bar-1 { + width: 10px; + top: 0px; + } + + .main-header .navbar-toggler .icon-bar-2 { + width: 16px; + top: 12px; + } + + .main-header .navbar-toggler .icon-bar-3 { + width: 20px; + top: 21px; + } + + .main-header .current .icon-bar { + margin-bottom: 5px; + border-radius: 0; + display: block; + } + + .main-header .current .icon-bar-1 { + width: 18px; + } + + .main-header .current .icon-bar-2 { + width: 30px; + } + + .main-header .current .icon-bar-3 { + width: 10px; + } + + .main-header .navbar-toggler:hover .icon-bar { + background-color: #fff; + } + + .main-header .navbar-toggler:focus .icon-bar { + background-color: #fff; + } + + #mainMenu li { + width: 200px; + text-align: left; + margin-left: 20%; + margin-bottom: 10px; + } +} + +/* Dropdown Content (Hidden by Default) */ + +.dropdown-content { + display: none; + position: absolute; + background-color: #f1f1f1; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Links inside the dropdown */ + +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ + +.dropdown-content a:hover { + background-color: #ddd; +} + +/* Show the dropdown menu on hover */ + +.dropdown:hover .dropdown-content { + display: block; + margin-left: 50%; +} + +/*End*/ + +/*Full Screen Img*/ +a { + color: #fff; + text-decoration: none !important; +} + +a:hover { + color: #fff; +} + +.promotion-carousel .promotions { + max-width: 100% !important; + height: 100%; +} +.promotion-carousel .promotion { + width: 100%; + height: 100vh; + min-height: 600px; + position: relative; + background-size: cover; + background-position: top right; + background-repeat: no-repeat; + overflow: hidden; +} +.promotion-carousel .promotion .shade { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + + background-image: -webkit-gradient( + linear, + left top, + right top, + color-stop(0, rgba(0, 0, 0, 0.5)), + color-stop(50%, rgba(0, 0, 0, 0)) + ); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0, rgba(0, 0, 0, 0) 50%); +} + +.promo-text { + color: #fff; + position: relative; +} +.promo-text .copy { + display: block; +} + +.promo-detail { + position: absolute; + left: 0; + top: 50%; + z-index: 100; + width: 85%; + margin-left: 30px; + padding: 10% 10% 10% 0; + -webkit-transform: translate(0, -50%); + transform: translate(0, -50%); +} +/*End*/ + +/*Services*/ +.Services { + max-width: 100%; +} + +.sect--padding-top { + padding-top: 90px; +} + +.row--center { + max-width: 1000px; + margin: 0 auto; + text-align: center; +} +.row--margin { + margin-top: 45px; +} + +.row__title { + text-align: center; + font-size: 26px; + font-weight: 400; + margin-top: 5rem; +} + +.row__sub { + text-align: center; + font-size: 18px; + font-weight: 400; + margin: 0px; + color: #8198ae; +} + +.price-box { + padding: 0px 25px; +} + +.price-box__wrap { + background-color: #fff; + border-radius: 6px; + box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.2); + padding: 35px 35px 40px 35px; + margin-bottom: 5rem; + text-align: center; + transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; +} + +.price-box__img { + display: inline-block; +} + +.price-box__img { + width: 100px; + height: 100px; + border-radius: 50%; + background-position: center; + background-size: contain; + background-repeat: no-repeat; + background-color: #c7c7c7; +} + +.price-box--purple .price-box__img { + background-image: url("images/alert.svg"); +} + +.price-box--violet .price-box__img { + background-image: url("images/mail.svg"); +} + +.price-box--blue .price-box__img { + background-image: url("images/confirmed.svg"); +} + +.price-box__title { + font-size: 22px; + letter-spacing: 1px; + margin-top: 25px; + margin-bottom: 10px; +} + +.price-box__people { + font-size: 12px; + color: #515151; + font-weight: 400; + letter-spacing: 1px; +} + +.better { + font-size: 11px; + color: #515151; + font-weight: 400; + letter-spacing: 1px; +} + +.price-box__discount { + font-size: 28px; + font-weight: 700; + margin-top: 20px; + margin-bottom: 0; +} + +.price-box__dollar { + font-size: 18px; + font-weight: 400; + vertical-align: top; + margin-right: 4px; +} + +.price-box--purple .price-box__dollar { + color: #8a3aff; +} + +.price-box--violet .price-box__dollar { + color: #6f79ff; +} + +.price-box--blue .price-box__dollar { + color: #3a9fff; +} + +.price-box__discount--light { + font-weight: 400; + font-size: 20px; + margin-left: 3px; +} + +.price-box__price { + margin-top: 3px; + font-size: 14px; + color: #8198ae; + letter-spacing: 1px; + margin-bottom: 0; + font-weight: 300; + text-decoration: line-through; +} + +.price-box__feat { + margin-top: 30px; + font-size: 16px; +} + +.price-box__list { + text-align: left; + padding-left: 30px; + margin: 0; + list-style: none; +} + +.price-box__list-el { + position: relative; + margin-bottom: 8px; + font-weight: 300; +} + +.price-box__list-el:before { + content: "✓"; + position: absolute; + left: -25px; + font-size: 18px; + top: -4px; +} + +.price-box--purple .price-box__list-el:before { + color: #8a3aff; +} + +.price-box--violet .price-box__list-el:before { + color: #6f79ff; +} + +.price-box--blue .price-box__list-el:before { + color: #3a9fff; +} + +.price-box__wrap:hover { + backface-visibility: hidden; + transform: scale(1.05, 1.05); + box-shadow: 0px 30px 18px -8px rgba(0, 0, 0, 0.1); +} +/*End*/ + +/*Our Recruiters*/ +.Recruiters { + max-width: 100%; +} + +.icon .iconBx img { + width: 100px; + height: 100px; + opacity: 0.5; + filter: grayscale(1); + transition: 0.5s; + transform: scale(0.8); +} + +.icon .iconBx:hover img { + opacity: 1; + filter: grayscale(0); + transform: scale(1); +} + +.icon .twit img { + width: 130px; + height: 130px; + opacity: 0.5; + filter: grayscale(1); + transition: 0.5s; + transform: scale(0.8); +} + +.icon .twit:hover img { + opacity: 1; + filter: grayscale(0); + transform: scale(1); +} +/*End*/ + +/*Testimonials*/ +.Testimobials { + max-width: 100%; +} + +.testimonials-container { + color: rgba(255, 255, 255, 0.8); + display: flex; + flex-direction: column; + align-items: center; + padding: 70px 30px 30px; + transition: all 0.3s ease-in; + margin: 50px; + max-width: 100%; +} + +.fa-quote-left { + color: rgba(0, 0, 0, 0.15); + font-size: 50px; +} + +.text { + line-height: 30px; + margin: 40px 0 20px; + min-height: 150px; + max-width: 600px; + text-align: justify; + word-spacing: 5px; +} + +.name { + align-self: flex-end; + font-weight: bold; + letter-spacing: 2px; + text-transform: uppercase; +} + +.authors-container { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; +} + +.author { + margin: 30px 30px 0; + cursor: pointer; +} + +.author.selected img { + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.5); + transform: scale(1.2); +} + +.author img { + transition: all 0.3s ease-in; + border-radius: 50%; + width: 50px; + height: 50px; +} +/*End*/ + +/*Contact Us*/ +.ContactUs { + max-width: 100%; +} + +.contactform { + margin-top: 50px; + margin-bottom: 50px; +} + +.form-group { + margin-bottom: 20px; + display: table; + width: 100%; + position: relative; +} + +.form__field { + height: 50px; + position: relative; + border: none; + padding: 10px 12px; + width: 100%; + border-radius: 6px; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + -o-appearance: none; + box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.2); + transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + z-index: 2; +} + +.form__select { + background-image: url("http://www.austinlawrencepartners.com/wp-content/uploads/arrow-down-gray-hi.png"); + background-repeat: no-repeat; + background-size: 10px; + background-position-x: 97%; + width: 100%; + padding-right: 30px; + background-position-y: center; + background-color: #fff; + color: #8198ae; +} + +.form__field--half { + width: 50%; + float: left; +} + +.form__field--half:first-of-type { + padding-right: 15px; +} + +.form__textarea { + height: 200px; +} + +.btnsub { + background-color: #3a9fff; + border-color: #3a9fff; + border-block-end-color: inherit; + border-right-color: inherit; + border-radius: 20px; + padding: 10px 25px; + color: #fff; + box-shadow: 0px 18px 13px -6px rgba(0, 0, 0, 0.2); + transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; +} + +.btnsub:hover { + box-shadow: 0px 25px 18px -6px rgba(0, 0, 0, 0.2); + background-color: #63b2fc; + color: #fff; +} + +.btn-up { + position: absolute; + bottom: -15px; + right: 25px; + z-index: 3; +} +/*End*/ + +/*DarkMode Float*/ +.float { + position: fixed; + bottom: 40px; + right: 40px; + color: #fff; + animation: up 2.5s infinite; +} + +/*End*/ + +/* footer */ +.page-footer { + background-color: #1f1f1f; +} + +.dark-grey-text:hover { + text-decoration: none; +} + +.icon_name { + padding-left: 10px; + cursor: pointer; +} + +.dark-grey-text { + color: #fff; +} +/*End*/ + +/*Newsletter*/ +.card { + align-items: center !important; + background: url(images/envelope.png); + background-size: contain; + background-repeat: no-repeat; + background-position: right calc(110px + (150 - 110) * ((100vw - 360px) / (1600 - 360))) bottom !important; +} + +.btn-success { + background-color: #3a9ffe; + border-color: #3a9ffe; + border-radius: 6px; + box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.2); + max-width: 8rem; +} + +.btn-success:hover { + color: #fff; + background-color: #63b2fc; + border-color: #63b2fc; +} + +.form-border { + height: 50px; + position: relative; + border: none; + padding: 10px 12px; + width: 100%; + appearance: none; + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + -o-appearance: none; + box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.2); + transition: all 0.4s; + -webkit-transition: all 0.4s; + -moz-transition: all 0.4s; + -ms-transition: all 0.4s; + -o-transition: all 0.4s; + z-index: 2; + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +/*End*/ + +/*Subscribe*/ +#overlay, +#registration { + opacity: 0; + transition: 0.5s; +} +#overlay { + pointer-events: none; +} +#overlay.open { + opacity: 1; + pointer-events: auto; +} +#registration { + transform: translateY(80%) scale(0.8); + transition-timing-function: cubic-bezier(0.3, 0, 0, 1.3); + transition-delay: 0.4s; +} +#overlay.open #registration { + opacity: 1; + transform: none; +} + +#overlay, +#registration { + opacity: 0; + transition: 0.5s; +} + +#overlay { + position: relative; + overflow: hidden; + top: 0; + right: 0; + bottom: 0; + left: 0; + background: transparent; + pointer-events: none; +} + +#overlay.open { + opacity: 1; + pointer-events: auto; +} + +#registration { + position: relative; + text-align: center; + width: 20rem; + height: 13.5rem; + margin: 10px auto 5px; + padding: 25px; + border-radius: 5px; + box-shadow: 0 5px 12px rgba(15, 27, 39, 0.4); + background: #ececec; + -webkit-transform: translateY(80%) scale(0.8); + transform: translateY(80%) scale(0.8); + transition-timing-function: cubic-bezier(0.3, 0, 0, 1.3); + transition-delay: 0.4s; +} + +.sub { + background: #ececec; +} + +.open #registration { + opacity: 1; + -webkit-transform: none; + transform: none; +} + +#registration .close { + position: absolute; + width: 18px; + height: 18px; + left: 7px; + top: 7px; +} + +@media (-webkit-min-device-pixel-ratio: 2), (min-device-pixel-ratio: 2), (min-resolution: 2dppx) { + #registration .close { + background-size: 100% 100%; + } +} + +#registration h1 { + margin-bottom: 20px; + font-size: 13px; + font-weight: 700; + color: #212529; +} + +input { + display: block; + width: 15rem; + margin: auto; + padding: 8px; + border: 1px solid #414141; + border-radius: 5px 5px 0 0; + font: 500 13px "helvetica neue", helvetica, arial, sans-serif; + -webkit-font-smoothing: antialiased; +} + +input:focus { + outline: none; +} + +[type="email"] { + border-top: none; + border-radius: 0 0 5px 5px; +} + +::-webkit-input-placeholder { + color: #afb9bf; +} + +::-moz-placeholder { + color: #afb9bf; +} + +:-ms-input-placeholder { + color: #afb9bf; +} + +.confirm { + display: block; + margin: 20px auto; + border-radius: 5px; +} +/*End*/ + +/*Media Queries*/ +@media (min-width: 992px) { + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + margin: 0.125rem -12px 0px; + } +} + +@media (min-width: 1280px) { + .promo-detail { + margin-left: 90px; + } + + #registration { + width: 40rem; + } + + input.sub { + width: 30rem; + font: 500 18px "helvetica neue", helvetica, arial, sans-serif; + } +} +@media (min-width: 1440px) { + .promo-detail { + width: 650px; + } +} +.promo-detail .headline { + font-weight: 900; + font-size: 22px; + line-height: 1.15; + margin-bottom: 5px; + text-transform: uppercase; +} +.promo-detail .body { + font-size: 14px; + line-height: 1.3; + margin-bottom: 5px; + text-transform: none; +} +.promo-detail .buttons { + padding: 15px 0; +} +.promo-detail .button { + box-sizing: content-box; + height: auto; + line-height: 1; + padding: 15px 20px; + width: auto; + display: inline-block; + text-decoration: none; +} +.promo-detail .button:first-child { + background: #b10000; +} +.promo-detail .button:hover { + color: #fff; + border-color: #c00; + background-color: #6b0000; + text-decoration: none; +} +.promo-detail .dash { + background: #b10000; + display: block; + height: 3px; + margin-bottom: 10px; + width: 30px; +} +.promo-detail .promo-flag { + background: 0 0; + font-size: 14px; + line-height: 14px; + margin-bottom: 8px; + position: relative; + text-transform: uppercase; + display: inline-block; +} + +@media (min-width: 668px) { + .promo-detail { + width: 900px; + } + .promo-detail .headline { + font-size: 36px; + line-height: 1.1; + } + .promo-detail .body { + font-size: 14px; + margin-bottom: 0; + text-transform: none; + } +} +@media (min-width: 840px) { + .promo-detail .headline { + font-size: 42px; + } + .promo-detail .body { + font-size: 18px; + } +} +@media (min-width: 1024px) { + .promo-detail .dash { + display: block; + height: 3px; + margin-bottom: 15px; + width: 30px; + } + .promo-detail .headline { + font-weight: 600; + font-size: 50px; + line-height: 0.85; + margin-bottom: 15px; + margin-left: -2px; + } + .promo-detail .headline.medium { + font-size: 50px; + } + .promo-detail .headline.long { + font-size: 40px; + } + .promo-detail .body { + font-size: 18px; + line-height: 1.4; + } + .promo-detail .button { + padding: 12px; + } +} +@media (min-width: 1440px) { + .promo-detail .dash { + height: 4px; + width: 40px; + } + .promo-detail .headline { + font-size: 66px; + } + .promo-detail .headline.medium { + font-size: 56px; + line-height: 1; + } + .promo-detail .headline.long { + font-size: 46px; + line-height: 1; + } + .promo-detail .promo-flag { + font-size: 18px; + line-height: 18px; + } + .promo-detail .body { + font-size: 24px; + margin-bottom: 15px; + } +} +.navigation { + position: fixed; + top: 50%; + -webkit-transform: translateY(-50%); + transform: translateY(-50%); + right: 50px; +} +.navigation ul { + list-style: none; + padding: 0; +} +.navigation li { + position: relative; + width: 8px; + height: 8px; + margin: 15px 0; +} +.navigation li a { + background-color: #fff; + border-radius: 100%; + height: 100%; + width: 100%; + display: block; + -webkit-transition: 0.2s ease; + transition: 0.2s ease; +} +.navigation li a.active { + background-color: #b10000; +} +/*End*/ + +/*Animations*/ +@keyframes fadeUp { + 0% { + transform: translateY(4rem); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes scale { + 0% { + transform: scale(2); + } + 100% { + opacity: 1; + transform: scale(1); + } +} + +@keyframes grow { + 0% { + width: 0; + } + 100% { + opacity: 1; + width: 100%; + } +} + +@keyframes spin { + 0% { + transform: rotate(0); + } + 100% { + opacity: 1; + transform: rotate(-360deg); + } +} + +@keyframes fadeDown { + 0% { + transform: translateY(-1rem); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes up { + 0% { + opacity: 0; + } + 50% { + opacity: 1; + } + 100% { + opacity: 0; + transform: translateY(-1rem); + } +} +/*End*/ + +/*Scroll Bar*/ +::-webkit-scrollbar { + width: 5px; + background-color: #414141; +} +::-webkit-scrollbar-track { + border-radius: 10px; + background: rgba(0, 0, 0, 0.1); + border: 1px solid #414141; +} + +::-webkit-scrollbar-thumb { + border-radius: 10px; + background: #fff; + border: 1px solid #fff; +} + +::-webkit-scrollbar-thumb:hover { + background: #63b2fc; + border-color: #63b2fc; +} + +::-webkit-scrollbar-thumb:active { + background: linear-gradient(left, #22add4, #1e98ba); +} +/*End*/ diff --git a/job_portal/general/static/general/login/img/2.jpg b/job_portal/general/static/general/login/img/2.jpg new file mode 100644 index 0000000..35a6df2 Binary files /dev/null and b/job_portal/general/static/general/login/img/2.jpg differ diff --git a/job_portal/general/static/general/login/img/log.svg b/job_portal/general/static/general/login/img/log.svg new file mode 100644 index 0000000..c2158b4 --- /dev/null +++ b/job_portal/general/static/general/login/img/log.svg @@ -0,0 +1 @@ +maker launch \ No newline at end of file diff --git a/job_portal/general/static/general/login/img/register.svg b/job_portal/general/static/general/login/img/register.svg new file mode 100644 index 0000000..aadca70 --- /dev/null +++ b/job_portal/general/static/general/login/img/register.svg @@ -0,0 +1 @@ +press play \ No newline at end of file diff --git a/job_portal/general/static/general/login/style.css b/job_portal/general/static/general/login/style.css new file mode 100644 index 0000000..e88db1c --- /dev/null +++ b/job_portal/general/static/general/login/style.css @@ -0,0 +1,654 @@ +body { + max-width: 100% !important; + background-color: #c7c7c7; +} + +.btns .btns-secondary { + color: transparent; +} + +ul { + list-style-type: none; +} + +.container1{ + width: 100%; + padding-right: 50px; + padding-left: 50px; + margin-right: auto; + margin-left: auto; +} +/*Header*/ +header { + background-image: url("img/2.jpg"); + background-repeat: no-repeat; + background-attachment: fixed; + background-size: 100% 100%; + margin-bottom: 16px; +} + + +[data-target="#mainMenu"] { + position: relative; + z-index: 999; +} + +#mainMenu li > a { + font-size: 16px; + letter-spacing: 1px; + color: #fff; + font-weight: 400; + /* position relative to its previous postion */ + position: relative; + z-index: 1; + text-decoration: none; +} + +.main-header.fixed-nav #mainMenu li > a { + color: #fff; + text-decoration: none; +} + +#mainMenu li:not(:last-of-type) { + margin-right: 30px; +} + +#mainMenu li > a::before { + position: absolute; + content: ""; + width: calc(100% - 1px); + height: 1px; + background: #fff; + bottom: -6px; + left: 0; + -webkit-transform: scale(0, 1); + -ms-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + z-index: -1; + -webkit-transition: transform 0.5s ease; + transition: transform 0.5s ease; +} + +#mainMenu li > a:hover::before, +#mainMenu li > a.active::before { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; +} + +.main-header.fixed-nav #mainMenu li > a::before { + background: #000; +} + +.main-header { + position: relative; + left: 0; + z-index: 99; + width: 100%; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.main-header.fixed-nav { + top: 0; + background: #fff; + -webkit-box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +@media (max-width: 991px) { + .collapse.in { + display: block !important; + padding: 0; + clear: both; + } + + .navbar-toggler { + margin: 0; + padding: 0; + width: 40px; + height: 30px; + position: static; + margin-top: 10px; + border: none; + border-radius: 0; + outline: none !important; + } + + .main-header { + padding-top: 10px; + } + + .main-header .navbar { + float: none; + width: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + } + + .main-header .navbar-nav { + margin-top: 50px; + text-align: initial; + } + + .main-header .navbar-nav li .nav-link { + text-align: center; + padding: 20px 15px; + border-radius: 0px; + } + + .main-header .navbar-toggler .icon-bar { + background-color: #fff; + margin: 0 auto 6px; + border-radius: 0; + width: 30px; + height: 3px; + position: absolute; + right: 0; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + } + + .main-header .navbar .navbar-toggler .icon-bar:first-child { + margin-top: 3px; + } + + .main-header .navbar-toggler .icon-bar-1 { + width: 10px; + top: 0px; + } + + .main-header .navbar-toggler .icon-bar-2 { + width: 16px; + top: 12px; + } + + .main-header .navbar-toggler .icon-bar-3 { + width: 20px; + top: 21px; + } + + .main-header .current .icon-bar { + margin-bottom: 5px; + border-radius: 0; + display: block; + } + + .main-header .current .icon-bar-1 { + width: 18px; + } + + .main-header .current .icon-bar-2 { + width: 30px; + } + + .main-header .current .icon-bar-3 { + width: 10px; + } + + .main-header .navbar-toggler:hover .icon-bar { + background-color: #fff; + } + + .main-header .navbar-toggler:focus .icon-bar { + background-color: #fff; + } + + #mainMenu li { + width: 200px; + text-align: left; + margin-left: 20%; + margin-bottom: 10px; + } +} + +/* Dropdown Content (Hidden by Default) */ + +.dropdown-content { + display: none; + position: absolute; + background-color: #f1f1f1; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Links inside the dropdown */ + +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ + +.dropdown-content a:hover { + background-color: #ddd; +} + +/* Show the dropdown menu on hover */ + +.dropdown:hover .dropdown-content { + display: block; + margin-left: 50%; +} + +/*End*/ + + +.container { + position: relative; + width: 100%; + background-color: #fff; + min-height: 100vh; + overflow: hidden; +} + +.forms-container { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; +} + +.signin-signup { + position: absolute; + top: 50%; + transform: translate(-50%, -50%); + left: 75%; + width: 50%; + transition: 1s 0.7s ease-in-out; + display: grid; + grid-template-columns: 1fr; + z-index: 5; +} + +form { + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + padding: 0rem 5rem; + transition: all 0.2s 0.7s; + overflow: hidden; + grid-column: 1 / 2; + grid-row: 1 / 2; +} + +form.sign-up-form { + z-index: 1; +} + +form.sign-in-form { + z-index: 2; +} + +.title { + font-size: 2.2rem; + color: #444; + margin-bottom: 10px; +} + +.input-field { + max-width: 380px; + width: 100%; + background-color: #f0f0f0; + margin: 10px 0; + height: 55px; + border-radius: 55px; + display: grid; + grid-template-columns: 15% 85%; + padding: 0 0.4rem; + position: relative; +} + +.input-field i { + text-align: center; + line-height: 55px; + color: #acacac; + transition: 0.5s; + font-size: 1.1rem; +} + +.input-field input { + background: none; + outline: none; + border: none; + line-height: 1; + font-weight: 600; + font-size: 1.1rem; + color: #333; +} + +.input-field input::placeholder { + color: #aaa; + font-weight: 500; +} + +.social-text { + padding: 0.7rem 0; + font-size: 1rem; +} + +.social-media { + display: flex; + justify-content: center; +} + +.social-icon { + height: 46px; + width: 46px; + display: flex; + justify-content: center; + align-items: center; + margin: 0 0.45rem; + color: #333; + border-radius: 50%; + border: 1px solid #333; + text-decoration: none; + font-size: 1.1rem; + transition: 0.3s; +} + +.social-icon:hover { + color: #4481eb; + border-color: #4481eb; +} + +.btn { + width: 150px; + background-color: #5995fd; + border: none; + outline: none; + height: 49px; + border-radius: 49px; + color: #fff; + text-transform: uppercase; + font-weight: 600; + margin: 10px 0; + cursor: pointer; + transition: 0.5s; +} + +.btn:hover { + background-color: #4d84e2; +} +.panels-container { + position: absolute; + height: 100%; + width: 100%; + top: 0; + left: 0; + display: grid; + grid-template-columns: repeat(2, 1fr); +} + +.container:before { + content: ""; + position: absolute; + height: 2000px; + width: 2000px; + top: -10%; + right: 48%; + transform: translateY(-50%); + background-image: linear-gradient(-45deg, #4481eb 0%, #04befe 100%); + transition: 1.8s ease-in-out; + border-radius: 50%; + z-index: 6; +} + +.image { + width: 100%; + transition: transform 1.1s ease-in-out; + transition-delay: 0.4s; +} + +.panel { + display: flex; + flex-direction: column; + align-items: flex-end; + justify-content: space-around; + text-align: center; + z-index: 6; +} + +.left-panel { + pointer-events: all; + padding: 3rem 17% 2rem 12%; +} + +.right-panel { + pointer-events: none; + padding: 3rem 12% 2rem 17%; +} + +.panel .content { + color: #fff; + transition: transform 0.9s ease-in-out; + transition-delay: 0.6s; +} + +.panel h3 { + font-weight: 600; + line-height: 1; + font-size: 1.5rem; +} + +.panel p { + font-size: 0.95rem; + padding: 0.7rem 0; +} + +.btn.transparent { + margin: 0; + background: none; + border: 2px solid #fff; + width: 130px; + height: 57px; + font-weight: 600; + font-size: 0.8rem; +} + +.right-panel .image, +.right-panel .content { + transform: translateX(800px); +} + +/* ANIMATION */ + +.container.sign-up-mode:before { + transform: translate(100%, -50%); + right: 52%; +} + +.container.sign-up-mode .left-panel .image, +.container.sign-up-mode .left-panel .content { + transform: translateX(-800px); +} + +.container.sign-up-mode .signin-signup { + left: 25%; +} + +.container.sign-up-mode form.sign-up-form { + opacity: 1; + z-index: 2; +} + +.container.sign-up-mode form.sign-in-form { + opacity: 0; + z-index: 1; +} + +.container.sign-up-mode .right-panel .image, +.container.sign-up-mode .right-panel .content { + transform: translateX(0%); +} + +.container.sign-up-mode .left-panel { + pointer-events: none; +} + +.container.sign-up-mode .right-panel { + pointer-events: all; +} + +@media (max-width: 870px) { + .container { + min-height: 800px; + height: 100vh; + } + .signin-signup { + width: 100%; + top: 95%; + transform: translate(-50%, -100%); + transition: 1s 0.8s ease-in-out; + } + + .signin-signup, + .container.sign-up-mode .signin-signup { + left: 50%; + } + + .panels-container { + grid-template-columns: 1fr; + grid-template-rows: 1fr 2fr 1fr; + } + + .panel { + flex-direction: row; + justify-content: space-around; + align-items: center; + padding: 2.5rem 8%; + grid-column: 1 / 2; + } + + .right-panel { + grid-row: 3 / 4; + } + + .left-panel { + grid-row: 1 / 2; + } + + .image { + width: 200px; + transition: transform 0.9s ease-in-out; + transition-delay: 0.6s; + } + + .panel .content { + padding-right: 15%; + transition: transform 0.9s ease-in-out; + transition-delay: 0.8s; + } + + .panel h3 { + font-size: 1.2rem; + } + + .panel p { + font-size: 0.7rem; + padding: 0.5rem 0; + } + + .btn.transparent { + width: 110px; + height: 35px; + font-size: 0.7rem; + } + + .container:before { + width: 1500px; + height: 1500px; + transform: translateX(-50%); + left: 30%; + bottom: 68%; + right: initial; + top: initial; + transition: 2s ease-in-out; + } + + .container.sign-up-mode:before { + transform: translate(-50%, 100%); + bottom: 32%; + right: initial; + } + + .container.sign-up-mode .left-panel .image, + .container.sign-up-mode .left-panel .content { + transform: translateY(-300px); + } + + .container.sign-up-mode .right-panel .image, + .container.sign-up-mode .right-panel .content { + transform: translateY(0px); + } + + .right-panel .image, + .right-panel .content { + transform: translateY(300px); + } + + .container.sign-up-mode .signin-signup { + top: 5%; + transform: translate(-50%, 0); + } +} +.form-check{ + margin-top: 10px; + margin-left: 18px; +} + +@media (max-width: 570px) { + form { + padding: 0 1.5rem; + } + + .image { + display: none; + } + .panel .content { + padding: 0.5rem 1rem; + } + .container { + padding: 1.5rem; + } + + .container:before { + bottom: 72%; + left: 50%; + } + + +} +/* footer */ +.page-footer { + background-color: #1f1f1f; +} + +.dark-grey-text:hover { + text-decoration: none; +} + +.icon_name { + padding-left: 10px; + cursor: pointer; +} + +.dark-grey-text { + color: #fff; +} +/*End*/ \ No newline at end of file diff --git a/job_portal/general/static/general/recruiter-signup/img/2.jpg b/job_portal/general/static/general/recruiter-signup/img/2.jpg new file mode 100644 index 0000000..35a6df2 Binary files /dev/null and b/job_portal/general/static/general/recruiter-signup/img/2.jpg differ diff --git a/job_portal/general/static/general/recruiter-signup/style.css b/job_portal/general/static/general/recruiter-signup/style.css new file mode 100644 index 0000000..bea3255 --- /dev/null +++ b/job_portal/general/static/general/recruiter-signup/style.css @@ -0,0 +1,387 @@ +body { + max-width: 100% !important; + background-color: #c7c7c7; +} + +.btns .btns-secondary { + color: transparent; +} + +ul { + list-style-type: none; +} + +.container1{ + width: 100%; + padding-right: 50px; + padding-left: 50px; + margin-right: auto; + margin-left: auto; +} +/*Header*/ +header { + background-image: url("img/2.jpg"); + background-repeat: no-repeat; + background-attachment: fixed; + background-size: 100% 100%; + margin-bottom: 16px; +} + + +[data-target="#mainMenu"] { + position: relative; + z-index: 999; +} + +#mainMenu li > a { + font-size: 16px; + letter-spacing: 1px; + color: #fff; + font-weight: 400; + /* position relative to its previous postion */ + position: relative; + z-index: 1; + text-decoration: none; +} + +.main-header.fixed-nav #mainMenu li > a { + color: #fff; + text-decoration: none; +} + +#mainMenu li:not(:last-of-type) { + margin-right: 30px; +} + +#mainMenu li > a::before { + position: absolute; + content: ""; + width: calc(100% - 1px); + height: 1px; + background: #fff; + bottom: -6px; + left: 0; + -webkit-transform: scale(0, 1); + -ms-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + z-index: -1; + -webkit-transition: transform 0.5s ease; + transition: transform 0.5s ease; +} + +#mainMenu li > a:hover::before, +#mainMenu li > a.active::before { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; +} + +.main-header.fixed-nav #mainMenu li > a::before { + background: #000; +} + +.main-header { + position: relative; + left: 0; + z-index: 99; + width: 100%; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.main-header.fixed-nav { + top: 0; + background: #fff; + -webkit-box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +@media (max-width: 991px) { + .collapse.in { + display: block !important; + padding: 0; + clear: both; + } + + .navbar-toggler { + margin: 0; + padding: 0; + width: 40px; + height: 30px; + position: static; + margin-top: 10px; + border: none; + border-radius: 0; + outline: none !important; + } + + .main-header { + padding-top: 10px; + } + + .main-header .navbar { + float: none; + width: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + } + + .main-header .navbar-nav { + margin-top: 50px; + text-align: initial; + } + + .main-header .navbar-nav li .nav-link { + text-align: center; + padding: 20px 15px; + border-radius: 0px; + } + + .main-header .navbar-toggler .icon-bar { + background-color: #fff; + margin: 0 auto 6px; + border-radius: 0; + width: 30px; + height: 3px; + position: absolute; + right: 0; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + } + + .main-header .navbar .navbar-toggler .icon-bar:first-child { + margin-top: 3px; + } + + .main-header .navbar-toggler .icon-bar-1 { + width: 10px; + top: 0px; + } + + .main-header .navbar-toggler .icon-bar-2 { + width: 16px; + top: 12px; + } + + .main-header .navbar-toggler .icon-bar-3 { + width: 20px; + top: 21px; + } + + .main-header .current .icon-bar { + margin-bottom: 5px; + border-radius: 0; + display: block; + } + + .main-header .current .icon-bar-1 { + width: 18px; + } + + .main-header .current .icon-bar-2 { + width: 30px; + } + + .main-header .current .icon-bar-3 { + width: 10px; + } + + .main-header .navbar-toggler:hover .icon-bar { + background-color: #fff; + } + + .main-header .navbar-toggler:focus .icon-bar { + background-color: #fff; + } + + #mainMenu li { + width: 200px; + text-align: left; + margin-left: 20%; + margin-bottom: 10px; + } +} + +/* Dropdown Content (Hidden by Default) */ + +.dropdown-content { + display: none; + position: absolute; + background-color: #f1f1f1; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Links inside the dropdown */ + +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ + +.dropdown-content a:hover { + background-color: #ddd; +} + +/* Show the dropdown menu on hover */ + +.dropdown:hover .dropdown-content { + display: block; + margin-left: 50%; +} + +/*End*/ + + +.form-control { + font-size: 16px; + transition: all 0.4s; + box-shadow: none; +} +.form-control:focus { + border-color: #5cb85c; +} +.form-control, .btn { + border-radius: 50px; + outline: none !important; +} +.signin-form { + width: 400px; + margin: 0 auto; + padding: 30px 0; +} +.signin-form form { + border-radius: 5px; + margin-bottom: 20px; + background: #fff; + box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.2); + padding: 40px; +} +.signin-form a { + color: #5cb85c; +} +.signin-form h2 { + text-align: center; + font-size: 34px; + margin: 10px 0 15px; +} +.signin-form .hint-text { + color: #999; + text-align: center; + margin-bottom: 20px; +} +.signin-form .form-group { + margin-bottom: 20px; +} +.signin-form .btn { + font-size: 18px; + line-height: 26px; + font-weight: bold; + text-align: center; +} +.signin-form .small { + font-size: 13px; +} +.signin-btn { + text-align: center; + border-color: #5cb85c; + transition: all 0.4s; +} +.signin-btn:hover { + background: #5cb85c; + opacity: 0.8; +} +.or-seperator { + margin: 50px 0 15px; + text-align: center; + border-top: 1px solid #e0e0e0; +} +.or-seperator b { + padding: 0 10px; + width: 40px; + height: 40px; + font-size: 16px; + text-align: center; + line-height: 40px; + background: #fff; + display: inline-block; + border: 1px solid #e0e0e0; + border-radius: 50%; + position: relative; + top: -22px; + z-index: 1; +} +.social-btn .btn { + color: #fff; + margin: 10px 0 0 30px; + font-size: 15px; + width: 55px; + height: 55px; + line-height: 45px; + border-radius: 50%; + font-weight: normal; + text-align: center; + border: none; + transition: all 0.4s; +} +.social-btn .btn:first-child { + margin-left: 0; +} +.social-btn .btn:hover { + opacity: 0.8; +} +.social-btn .btn-primary { + background: #507cc0; +} +.social-btn .btn-info { + background: #64ccf1; +} +.social-btn .btn-danger { + background: #df4930; +} +.social-btn .btn i { + font-size: 20px; +} +.container{ + margin: 15px 0px 15px 0px; + width: 100%; + margin: 0 auto; + display: flex; + justify-content: center; +} +.card{ + box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.2); + width: 65%; +} +/* footer */ +.page-footer { + background-color: #1f1f1f; +} + +.dark-grey-text:hover { + text-decoration: none; +} + +.icon_name { + padding-left: 10px; + cursor: pointer; +} + +.dark-grey-text { + color: #fff; +} +/*End*/ \ No newline at end of file diff --git a/job_portal/general/static/general/seeker-signup/img/2.jpg b/job_portal/general/static/general/seeker-signup/img/2.jpg new file mode 100644 index 0000000..35a6df2 Binary files /dev/null and b/job_portal/general/static/general/seeker-signup/img/2.jpg differ diff --git a/job_portal/general/static/general/seeker-signup/style.css b/job_portal/general/static/general/seeker-signup/style.css new file mode 100644 index 0000000..bea3255 --- /dev/null +++ b/job_portal/general/static/general/seeker-signup/style.css @@ -0,0 +1,387 @@ +body { + max-width: 100% !important; + background-color: #c7c7c7; +} + +.btns .btns-secondary { + color: transparent; +} + +ul { + list-style-type: none; +} + +.container1{ + width: 100%; + padding-right: 50px; + padding-left: 50px; + margin-right: auto; + margin-left: auto; +} +/*Header*/ +header { + background-image: url("img/2.jpg"); + background-repeat: no-repeat; + background-attachment: fixed; + background-size: 100% 100%; + margin-bottom: 16px; +} + + +[data-target="#mainMenu"] { + position: relative; + z-index: 999; +} + +#mainMenu li > a { + font-size: 16px; + letter-spacing: 1px; + color: #fff; + font-weight: 400; + /* position relative to its previous postion */ + position: relative; + z-index: 1; + text-decoration: none; +} + +.main-header.fixed-nav #mainMenu li > a { + color: #fff; + text-decoration: none; +} + +#mainMenu li:not(:last-of-type) { + margin-right: 30px; +} + +#mainMenu li > a::before { + position: absolute; + content: ""; + width: calc(100% - 1px); + height: 1px; + background: #fff; + bottom: -6px; + left: 0; + -webkit-transform: scale(0, 1); + -ms-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center; + z-index: -1; + -webkit-transition: transform 0.5s ease; + transition: transform 0.5s ease; +} + +#mainMenu li > a:hover::before, +#mainMenu li > a.active::before { + -webkit-transform: scale(1, 1); + -ms-transform: scale(1, 1); + transform: scale(1, 1); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center; +} + +.main-header.fixed-nav #mainMenu li > a::before { + background: #000; +} + +.main-header { + position: relative; + left: 0; + z-index: 99; + width: 100%; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.main-header.fixed-nav { + top: 0; + background: #fff; + -webkit-box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + box-shadow: 0 8px 12px -8px rgba(0, 0, 0, 0.09); + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +@media (max-width: 991px) { + .collapse.in { + display: block !important; + padding: 0; + clear: both; + } + + .navbar-toggler { + margin: 0; + padding: 0; + width: 40px; + height: 30px; + position: static; + margin-top: 10px; + border: none; + border-radius: 0; + outline: none !important; + } + + .main-header { + padding-top: 10px; + } + + .main-header .navbar { + float: none; + width: 100%; + padding-left: 0; + padding-right: 0; + text-align: center; + } + + .main-header .navbar-nav { + margin-top: 50px; + text-align: initial; + } + + .main-header .navbar-nav li .nav-link { + text-align: center; + padding: 20px 15px; + border-radius: 0px; + } + + .main-header .navbar-toggler .icon-bar { + background-color: #fff; + margin: 0 auto 6px; + border-radius: 0; + width: 30px; + height: 3px; + position: absolute; + right: 0; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; + } + + .main-header .navbar .navbar-toggler .icon-bar:first-child { + margin-top: 3px; + } + + .main-header .navbar-toggler .icon-bar-1 { + width: 10px; + top: 0px; + } + + .main-header .navbar-toggler .icon-bar-2 { + width: 16px; + top: 12px; + } + + .main-header .navbar-toggler .icon-bar-3 { + width: 20px; + top: 21px; + } + + .main-header .current .icon-bar { + margin-bottom: 5px; + border-radius: 0; + display: block; + } + + .main-header .current .icon-bar-1 { + width: 18px; + } + + .main-header .current .icon-bar-2 { + width: 30px; + } + + .main-header .current .icon-bar-3 { + width: 10px; + } + + .main-header .navbar-toggler:hover .icon-bar { + background-color: #fff; + } + + .main-header .navbar-toggler:focus .icon-bar { + background-color: #fff; + } + + #mainMenu li { + width: 200px; + text-align: left; + margin-left: 20%; + margin-bottom: 10px; + } +} + +/* Dropdown Content (Hidden by Default) */ + +.dropdown-content { + display: none; + position: absolute; + background-color: #f1f1f1; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +/* Links inside the dropdown */ + +.dropdown-content a { + color: black; + padding: 12px 16px; + text-decoration: none; + display: block; +} + +/* Change color of dropdown links on hover */ + +.dropdown-content a:hover { + background-color: #ddd; +} + +/* Show the dropdown menu on hover */ + +.dropdown:hover .dropdown-content { + display: block; + margin-left: 50%; +} + +/*End*/ + + +.form-control { + font-size: 16px; + transition: all 0.4s; + box-shadow: none; +} +.form-control:focus { + border-color: #5cb85c; +} +.form-control, .btn { + border-radius: 50px; + outline: none !important; +} +.signin-form { + width: 400px; + margin: 0 auto; + padding: 30px 0; +} +.signin-form form { + border-radius: 5px; + margin-bottom: 20px; + background: #fff; + box-shadow: 2px 2px 12px rgba(0, 0, 0, 0.2); + padding: 40px; +} +.signin-form a { + color: #5cb85c; +} +.signin-form h2 { + text-align: center; + font-size: 34px; + margin: 10px 0 15px; +} +.signin-form .hint-text { + color: #999; + text-align: center; + margin-bottom: 20px; +} +.signin-form .form-group { + margin-bottom: 20px; +} +.signin-form .btn { + font-size: 18px; + line-height: 26px; + font-weight: bold; + text-align: center; +} +.signin-form .small { + font-size: 13px; +} +.signin-btn { + text-align: center; + border-color: #5cb85c; + transition: all 0.4s; +} +.signin-btn:hover { + background: #5cb85c; + opacity: 0.8; +} +.or-seperator { + margin: 50px 0 15px; + text-align: center; + border-top: 1px solid #e0e0e0; +} +.or-seperator b { + padding: 0 10px; + width: 40px; + height: 40px; + font-size: 16px; + text-align: center; + line-height: 40px; + background: #fff; + display: inline-block; + border: 1px solid #e0e0e0; + border-radius: 50%; + position: relative; + top: -22px; + z-index: 1; +} +.social-btn .btn { + color: #fff; + margin: 10px 0 0 30px; + font-size: 15px; + width: 55px; + height: 55px; + line-height: 45px; + border-radius: 50%; + font-weight: normal; + text-align: center; + border: none; + transition: all 0.4s; +} +.social-btn .btn:first-child { + margin-left: 0; +} +.social-btn .btn:hover { + opacity: 0.8; +} +.social-btn .btn-primary { + background: #507cc0; +} +.social-btn .btn-info { + background: #64ccf1; +} +.social-btn .btn-danger { + background: #df4930; +} +.social-btn .btn i { + font-size: 20px; +} +.container{ + margin: 15px 0px 15px 0px; + width: 100%; + margin: 0 auto; + display: flex; + justify-content: center; +} +.card{ + box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.2); + width: 65%; +} +/* footer */ +.page-footer { + background-color: #1f1f1f; +} + +.dark-grey-text:hover { + text-decoration: none; +} + +.icon_name { + padding-left: 10px; + cursor: pointer; +} + +.dark-grey-text { + color: #fff; +} +/*End*/ \ No newline at end of file diff --git a/job_portal/general/templates/landing_page.html b/job_portal/general/templates/landing_page.html new file mode 100644 index 0000000..69e775b --- /dev/null +++ b/job_portal/general/templates/landing_page.html @@ -0,0 +1,398 @@ + + + + + ONLINE JOB PORTAL + + + + + + + + + + + + + + + + + + + + {% load static %} + + + + + + +
+
+
+ + +
+ + + + + + + +
+

Services

+
+
+
+
+

Job Alerts

+

Get real time alert for hot new jobs

+
+
+ +
+
+
+

Find Better

+

Find Jobs that match your skills across top employers in the country

+
+
+ +
+
+
+

Apply Quick

+

Save time and effort with Job Portal Quick Apply

+
+
+
+
+ + + +
+

Our Recruiters

+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + +
+

Testimonials

+
+
+ +

+ +
+
+
+
+
+
+
+
+
+
+ + + +
+
+

Contact Us

+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ + +
+
+
+
+
+ + + + +
+
+

Find out more about us !

+

Subscribe to our Newsletter

+
+
+
+ +
+
+
+
+
+ + + +
+
+
+
+ +

Subscribe Newsletter

+ + + +
+
+
+ + + +
+ + + + + + + + {% load static %} + + + + + + + + diff --git a/job_portal/general/urls.py b/job_portal/general/urls.py index 61080ce..159c79f 100644 --- a/job_portal/general/urls.py +++ b/job_portal/general/urls.py @@ -1,6 +1,5 @@ from django.urls import path -from general import views +from . import views urlpatterns = [ - path("", views.index, name = "index") -] \ No newline at end of file + path('', views.landing_page, name='landing_page'),] \ No newline at end of file diff --git a/job_portal/general/views.py b/job_portal/general/views.py index 237b761..3539143 100644 --- a/job_portal/general/views.py +++ b/job_portal/general/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render # Create your views here. -def index(request): - return render(request, "home.html") +def landing_page(request): + return render(request, "landing_page.html") diff --git a/job_portal/job_portal/__pycache__/__init__.cpython-38.pyc b/job_portal/job_portal/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..919ebf7 Binary files /dev/null and b/job_portal/job_portal/__pycache__/__init__.cpython-38.pyc differ diff --git a/job_portal/job_portal/__pycache__/settings.cpython-38.pyc b/job_portal/job_portal/__pycache__/settings.cpython-38.pyc new file mode 100644 index 0000000..5a171eb Binary files /dev/null and b/job_portal/job_portal/__pycache__/settings.cpython-38.pyc differ diff --git a/job_portal/job_portal/__pycache__/urls.cpython-38.pyc b/job_portal/job_portal/__pycache__/urls.cpython-38.pyc new file mode 100644 index 0000000..c14f34c Binary files /dev/null and b/job_portal/job_portal/__pycache__/urls.cpython-38.pyc differ diff --git a/job_portal/job_portal/__pycache__/wsgi.cpython-38.pyc b/job_portal/job_portal/__pycache__/wsgi.cpython-38.pyc new file mode 100644 index 0000000..61a9761 Binary files /dev/null and b/job_portal/job_portal/__pycache__/wsgi.cpython-38.pyc differ diff --git a/job_portal/job_portal/settings.py b/job_portal/job_portal/settings.py index 6197239..2655dd8 100644 --- a/job_portal/job_portal/settings.py +++ b/job_portal/job_portal/settings.py @@ -11,7 +11,7 @@ """ import os - +from django.contrib.messages import constants as messages # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) @@ -37,8 +37,15 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'recruiter', + 'seeker', + 'general', + 'crispy_forms', + 'accounts', + 'users', + # 'django_countries', ] - +CRISPY_TEMPLATE_PACK = 'bootstrap4' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -116,5 +123,19 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.0/howto/static-files/ - STATIC_URL = '/static/' +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "static") +] + +MEDIA_ROOT = os.path.join(BASE_DIR,'media') +MEDIA_URL = '/media/' +LOGIN_REDIRECT_URL = 'display' #login_update +LOGOUT_REDIRECT_URL = 'login' #login_update +MESSAGE_TAGS = { + messages.DEBUG: 'alert-info', + messages.INFO: 'alert-info', + messages.SUCCESS: 'alert-success', + messages.WARNING: 'alert-warning', + messages.ERROR: 'alert-danger', +} \ No newline at end of file diff --git a/job_portal/job_portal/urls.py b/job_portal/job_portal/urls.py index aab81ce..04faff4 100644 --- a/job_portal/job_portal/urls.py +++ b/job_portal/job_portal/urls.py @@ -14,8 +14,14 @@ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) """ from django.contrib import admin -from django.urls import path +from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), + + path('', include("general.urls")), + path('recruiter/', include("recruiter.urls")), + path('find/', include("seeker.urls")), + path('accounts/', include('django.contrib.auth.urls')), # login_update + path('accounts/', include('accounts.urls')), # signup_update ] diff --git a/job_portal/media/profile_pics/WhatsApp_Image_2020-09-16_at_10.04.39_PM.jpeg b/job_portal/media/profile_pics/WhatsApp_Image_2020-09-16_at_10.04.39_PM.jpeg new file mode 100644 index 0000000..62c100c Binary files /dev/null and b/job_portal/media/profile_pics/WhatsApp_Image_2020-09-16_at_10.04.39_PM.jpeg differ diff --git a/job_portal/media/profile_pics/index.png b/job_portal/media/profile_pics/index.png new file mode 100644 index 0000000..dd1042d Binary files /dev/null and b/job_portal/media/profile_pics/index.png differ diff --git a/job_portal/recruiter/admin.py b/job_portal/recruiter/admin.py index 8c38f3f..39f4fdc 100644 --- a/job_portal/recruiter/admin.py +++ b/job_portal/recruiter/admin.py @@ -1,3 +1,7 @@ from django.contrib import admin - +from .models import Job # Register your models here. + + +admin.site.register(Job) +# admin.site.register(Attachment) diff --git a/job_portal/recruiter/forms.py b/job_portal/recruiter/forms.py new file mode 100644 index 0000000..e30c7ed --- /dev/null +++ b/job_portal/recruiter/forms.py @@ -0,0 +1,10 @@ + +from django.forms import ModelForm ,CheckboxInput, CheckboxSelectMultiple +from django_countries.widgets import CountrySelectWidget +from recruiter.models import Job + +class PostJobForm(ModelForm): + class Meta: + model = Job + exclude = ['recruiter_name', 'created_on'] + # widgets = {'country': CountrySelectWidget()} \ No newline at end of file diff --git a/job_portal/recruiter/migrations/0001_initial.py b/job_portal/recruiter/migrations/0001_initial.py new file mode 100644 index 0000000..7256d17 --- /dev/null +++ b/job_portal/recruiter/migrations/0001_initial.py @@ -0,0 +1,43 @@ +# Generated by Django 3.1 on 2020-09-30 15:12 + +import autoslug.fields +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import django_countries.fields + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Job', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('job_title', models.CharField(max_length=60)), + ('slug', autoslug.fields.AutoSlugField(editable=False, populate_from='job_title')), + ('company_name', models.CharField(default='', max_length=256)), + ('description', models.TextField(blank=True, default='')), + ('job_type', models.CharField(choices=[('P', 'Part Time'), ('F', 'Full Time'), ('R', 'Remote Work')], max_length=3)), + ('created_on', models.DateTimeField(blank=True, default=django.utils.timezone.now, null=True)), + ('location', models.CharField(blank=True, max_length=256)), + ('country', django_countries.fields.CountryField(max_length=2)), + ('status', models.IntegerField(choices=[(0, 'Open'), (1, 'Closed')], default=0)), + ('vacany', models.IntegerField(default=1)), + ('email', models.EmailField(max_length=254)), + ('phone_number', models.CharField(max_length=50)), + ('recruiter_name', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='recruiter_name', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name_plural': 'Jobs', + 'ordering': ['created_on'], + }, + ), + ] diff --git a/job_portal/recruiter/migrations/0002_remove_job_country.py b/job_portal/recruiter/migrations/0002_remove_job_country.py new file mode 100644 index 0000000..e7cdf51 --- /dev/null +++ b/job_portal/recruiter/migrations/0002_remove_job_country.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1 on 2020-09-30 15:26 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruiter', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='job', + name='country', + ), + ] diff --git a/job_portal/recruiter/migrations/0003_auto_20201001_1448.py b/job_portal/recruiter/migrations/0003_auto_20201001_1448.py new file mode 100644 index 0000000..5b09897 --- /dev/null +++ b/job_portal/recruiter/migrations/0003_auto_20201001_1448.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1 on 2020-10-01 09:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruiter', '0002_remove_job_country'), + ] + + operations = [ + migrations.AlterField( + model_name='job', + name='job_type', + field=models.CharField(choices=[('Part Time', 'Part Time'), ('Full Time', 'Full Time'), ('Remote Work', 'Remote Work')], max_length=60), + ), + ] diff --git a/job_portal/recruiter/migrations/0004_profile.py b/job_portal/recruiter/migrations/0004_profile.py new file mode 100644 index 0000000..6ec58fa --- /dev/null +++ b/job_portal/recruiter/migrations/0004_profile.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1 on 2020-10-01 10:03 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('recruiter', '0003_auto_20201001_1448'), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('dob', models.DateField()), + ('email', models.EmailField(max_length=254)), + ('phone_number', models.CharField(max_length=50)), + ('location', models.CharField(blank=True, max_length=256)), + ('username', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_name', to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/job_portal/recruiter/migrations/0005_auto_20201001_1702.py b/job_portal/recruiter/migrations/0005_auto_20201001_1702.py new file mode 100644 index 0000000..a495d5e --- /dev/null +++ b/job_portal/recruiter/migrations/0005_auto_20201001_1702.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1 on 2020-10-01 11:32 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruiter', '0004_profile'), + ] + + operations = [ + migrations.AlterModelOptions( + name='job', + options={'ordering': ['-created_on'], 'verbose_name_plural': 'Jobs'}, + ), + ] diff --git a/job_portal/recruiter/migrations/0006_delete_profile.py b/job_portal/recruiter/migrations/0006_delete_profile.py new file mode 100644 index 0000000..77452a7 --- /dev/null +++ b/job_portal/recruiter/migrations/0006_delete_profile.py @@ -0,0 +1,16 @@ +# Generated by Django 3.1 on 2020-10-01 11:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('recruiter', '0005_auto_20201001_1702'), + ] + + operations = [ + migrations.DeleteModel( + name='Profile', + ), + ] diff --git a/job_portal/recruiter/models.py b/job_portal/recruiter/models.py index 71a8362..e030ee0 100644 --- a/job_portal/recruiter/models.py +++ b/job_portal/recruiter/models.py @@ -1,3 +1,47 @@ from django.db import models +from autoslug import AutoSlugField +from django.utils import timezone +from django.contrib.auth.models import User +from django.urls import reverse # new +# from cities.models import BaseCountry # Create your models here. +class Job(models.Model): + STATUS = ( + (0,"Open"), + (1,"Closed") + ) + JOB_TYPES = ( + ('Part Time', "Part Time"), + ('Full Time', "Full Time"), + ('Remote Work', "Remote Work") + ) + job_title = models.CharField(max_length=60) + slug = AutoSlugField(populate_from='job_title') + company_name = models.CharField(max_length=256, default='') + description = models.TextField(default='',blank=True) + job_type = models.CharField(choices=JOB_TYPES,max_length=60) + created_on = models.DateTimeField(default=timezone.now, blank=True, null=True) + location = models.CharField(max_length=256,blank=True) + # country = CountryField(blank_label='Select country') + status = models.IntegerField(choices=STATUS, default=0) + vacany = models.IntegerField(default=1) + recruiter_name = models.ForeignKey(User, on_delete=models.CASCADE, related_name = 'recruiter_name') + email = models.EmailField(max_length=254) + phone_number = models.CharField(max_length=50) + + def __str__(self): + return self.job_title + + # def get_absolute_url(self): # new + # return reverse('job_detail', args=[str(self.id)]) + + def get_absolute_url(self): # new + return reverse('job_details', args=[str(self.id)]) + + class Meta: + ordering = ["-created_on"] + verbose_name_plural = "Jobs" + + + \ No newline at end of file diff --git a/job_portal/recruiter/templates/display.html b/job_portal/recruiter/templates/display.html new file mode 100644 index 0000000..d0f5383 --- /dev/null +++ b/job_portal/recruiter/templates/display.html @@ -0,0 +1,24 @@ +{% extends 'hire_base.html' %} +{% block content %} + + + + {% for job in jobs %} +
+ +
+
{{job.company_name}}|{{job.location}}|{{job.job_type}}
+

{{job.description|safe|urlize|linebreaks|slice:":500"}}...

+

No. of Post : {{job.vacany}}

+ Apply Here +
+
+
+ {% endfor %} + + + +{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/templates/hire_base.html b/job_portal/recruiter/templates/hire_base.html new file mode 100644 index 0000000..231d361 --- /dev/null +++ b/job_portal/recruiter/templates/hire_base.html @@ -0,0 +1,80 @@ + + + + + + + + + + + Job Finder + + + + + + + + + +
+
+
+ + {% block content %} + + {% endblock content %} + +
+
+ + + + + + + + + + \ No newline at end of file diff --git a/job_portal/recruiter/templates/hire_dashboard.html b/job_portal/recruiter/templates/hire_dashboard.html new file mode 100644 index 0000000..1d90498 --- /dev/null +++ b/job_portal/recruiter/templates/hire_dashboard.html @@ -0,0 +1,55 @@ +{% extends 'hire_base.html'%} +{% block content %} + +
+

Jobs + + +

+
+ +
+
+ +
+ + + + + + + + + + + + + {% for job in jobs %} + + + + + + + + + + + + {% endfor %} + + +
Job Title Created On Location Job Type Status
{{ job.job_title }} {{ job.created_on}}{{ job.location}} {{ job.job_type}} {% if job.status %} + Closed + {% else %} + Open + {% endif %} +
+ +
+ +{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/templates/index.html b/job_portal/recruiter/templates/index.html new file mode 100644 index 0000000..ae80525 --- /dev/null +++ b/job_portal/recruiter/templates/index.html @@ -0,0 +1,26 @@ +{% extends 'hire_base.html' %} +{% load crispy_forms_tags %} + +{% block content %} + +
+ +

Post a Job

+
+{% for message in messages %} + +{% endfor %} +
+ {% csrf_token %} + {{ form|crispy }} + +
+
+ + +{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/templates/job_details.html b/job_portal/recruiter/templates/job_details.html new file mode 100644 index 0000000..00123b8 --- /dev/null +++ b/job_portal/recruiter/templates/job_details.html @@ -0,0 +1,49 @@ +{% extends 'hire_base.html' %} +{% block content %} +
+
+
+
+
{{jobs.job_title}}
+
+
+
Location: {{jobs.location}} || No. Of Positions {{jobs.vacany}}
+
+
Description
+
{{ jobs.description|safe|urlize|linebreaks }}
+ {% if tasks.description == '' %} + + {% endif %} + + + + + +
+
+
+
+
+
+ + Edit Job + + + +
+
    + +
  • Created On : {{jobs.created_on}}
  • +
  • Label : {{jobs.job_type}}
  • + {% if tasks.completed %} +
  • Status : Closed
  • + {% else %} +
  • Status : Open
  • + {% endif %} + +
+
+
+
+
+{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/templates/job_edit.html b/job_portal/recruiter/templates/job_edit.html new file mode 100644 index 0000000..7e144ca --- /dev/null +++ b/job_portal/recruiter/templates/job_edit.html @@ -0,0 +1,12 @@ +{% extends 'hire_base.html' %} +{% load crispy_forms_tags %} + +{% block content %} +
+
+ {% csrf_token %} + {{form|crispy}} + +
+
+{% endblock content %} diff --git a/job_portal/recruiter/templates/jobs_display.html b/job_portal/recruiter/templates/jobs_display.html new file mode 100644 index 0000000..d44d392 --- /dev/null +++ b/job_portal/recruiter/templates/jobs_display.html @@ -0,0 +1,20 @@ + + + + + ModelForm Tutorial + + +

All User Details

+ + {% for item in jobs %} + + + + + + + {% endfor %} +
Title:{{ item.job_title }}

+ + \ No newline at end of file diff --git a/job_portal/recruiter/templates/profile.html b/job_portal/recruiter/templates/profile.html new file mode 100644 index 0000000..e69de29 diff --git a/job_portal/recruiter/templates/registration/login.html b/job_portal/recruiter/templates/registration/login.html new file mode 100644 index 0000000..59abf27 --- /dev/null +++ b/job_portal/recruiter/templates/registration/login.html @@ -0,0 +1,19 @@ +{% extends 'hire_base.html' %} +{% load crispy_forms_tags %} +{% block content %} + +
+
+

LOGIN

+
+
+
+ {%csrf_token%} + {{ form.as_p }} + + +
+ Are you new here? Sign-up. +
+
+{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/templates/signup.html b/job_portal/recruiter/templates/signup.html new file mode 100644 index 0000000..c3a9ce2 --- /dev/null +++ b/job_portal/recruiter/templates/signup.html @@ -0,0 +1,10 @@ +{% extends 'hire_base.html' %} +{% load crispy_forms_tags %} +{% block content %} +

Sign up

+
+ {% csrf_token %} + {{ form|crispy }} + +
+{% endblock content %} \ No newline at end of file diff --git a/job_portal/recruiter/urls.py b/job_portal/recruiter/urls.py new file mode 100644 index 0000000..5b97cf1 --- /dev/null +++ b/job_portal/recruiter/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.index, name = 'index'), + path('display/', views.display, name = 'display'), + path('dashboard/', views.dashboard, name = 'dashboard'), + path('job_details//', views.job_details, name='job_details'), + path('job_edit//edit/', views.JobUpdate.as_view(), name='job_edit'), + # path('jobnew/', views.jobPost, name='job_new'), # new + +] \ No newline at end of file diff --git a/job_portal/recruiter/views.py b/job_portal/recruiter/views.py index 91ea44a..6e7c65d 100644 --- a/job_portal/recruiter/views.py +++ b/job_portal/recruiter/views.py @@ -1,3 +1,68 @@ from django.shortcuts import render +from .models import Job +from django.template import loader +# from django.http import HttpResponse +from django.forms import modelformset_factory +from .forms import PostJobForm +from django.contrib import messages +from django.contrib.auth.decorators import login_required +from django.views.generic.edit import UpdateView +from django.contrib.auth.mixins import LoginRequiredMixin # new +# Create your views here. # Create your views here. +# def index(request): +# return render(request, "hire_home.html") + +@login_required +def index(request): + form = PostJobForm() + + if request.method == 'POST': + print(request.POST) + form = PostJobForm(request.POST) + if form.is_valid(): + obj = form.save(commit=False) + obj.recruiter_name = request.user + obj.save() + + messages.success(request, 'Your job posted successfully!') + else: + messages.warning(request, 'Please correct the error below.') + context = {'form' : form} + return render(request, 'index.html', context) + +@login_required +def display(request): + jobs = Job.objects.all() + return render(request, 'display.html', { + 'jobs' : jobs + }) + +@login_required +def dashboard(request): + jobs = Job.objects.filter(recruiter_name=request.user) + + return render(request, 'hire_dashboard.html', { + 'jobs' : jobs, + 'open' : Job.objects.filter(recruiter_name=request.user,status=0 ).count(), + 'closed' : Job.objects.filter(recruiter_name=request.user, status=1).count(), + }) + +@login_required +def job_details(request, job_id): + jobs = Job.objects.get(pk=job_id) + return render(request, 'job_details.html',{ + 'jobs' : jobs, + }) + +class JobUpdate(LoginRequiredMixin,UpdateView): + model = Job + template_name = 'job_edit.html' + fields = ['job_title','company_name','description','job_type','location','status','vacany','email','phone_number'] + + def dispatch(self, request, *args, **kwargs): # new + obj = self.get_object() + if obj.recruiter_name != self.request.user: + raise PermissionDenied + return super().dispatch(request, *args, **kwargs) \ No newline at end of file diff --git a/job_portal/seeker/templates/seeker_base.html b/job_portal/seeker/templates/seeker_base.html new file mode 100644 index 0000000..c6bcda3 --- /dev/null +++ b/job_portal/seeker/templates/seeker_base.html @@ -0,0 +1,62 @@ + + + + + + + + + + + Hello, world! + + + + + +
+
+
+
+ +
+ {% block content %} + + {% endblock content %} +
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/job_portal/seeker/templates/seekerdisplay.html b/job_portal/seeker/templates/seekerdisplay.html new file mode 100644 index 0000000..f156b6a --- /dev/null +++ b/job_portal/seeker/templates/seekerdisplay.html @@ -0,0 +1,23 @@ +{% extends 'seeker_base.html' %} +{% block content %} + + + + {% for job in jobs %} +
+
+ {{job.job_title}} +
+
+
{{job.company_name}}|{{job.location}}|{{job.job_type}}
+

{{job.description}}

+

No. of Post : {{job.vacany}}

+ Apply Here +
+
+
+ {% endfor %} + +
+ +{% endblock content %} \ No newline at end of file diff --git a/job_portal/seeker/urls.py b/job_portal/seeker/urls.py new file mode 100644 index 0000000..260c3a0 --- /dev/null +++ b/job_portal/seeker/urls.py @@ -0,0 +1,6 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path("job/", views.display, name = "home"), +] \ No newline at end of file diff --git a/job_portal/seeker/views.py b/job_portal/seeker/views.py index 91ea44a..936dc18 100644 --- a/job_portal/seeker/views.py +++ b/job_portal/seeker/views.py @@ -1,3 +1,15 @@ from django.shortcuts import render +from recruiter.models import Job +from django.template import loader +# from django.http import HttpResponse +from django.forms import modelformset_factory +from recruiter.forms import PostJobForm +from django.contrib import messages # Create your views here. + +def display(request): + jobs = Job.objects.all() + return render(request, 'seekerdisplay.html', { + 'jobs' : jobs + }) \ No newline at end of file diff --git a/job_portal/users/__init__.py b/job_portal/users/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/job_portal/users/__pycache__/__init__.cpython-38.pyc b/job_portal/users/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..61446fa Binary files /dev/null and b/job_portal/users/__pycache__/__init__.cpython-38.pyc differ diff --git a/job_portal/users/__pycache__/admin.cpython-38.pyc b/job_portal/users/__pycache__/admin.cpython-38.pyc new file mode 100644 index 0000000..1bc4642 Binary files /dev/null and b/job_portal/users/__pycache__/admin.cpython-38.pyc differ diff --git a/job_portal/users/__pycache__/models.cpython-38.pyc b/job_portal/users/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000..7c5876e Binary files /dev/null and b/job_portal/users/__pycache__/models.cpython-38.pyc differ diff --git a/job_portal/users/admin.py b/job_portal/users/admin.py new file mode 100644 index 0000000..2e7b859 --- /dev/null +++ b/job_portal/users/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from .models import Profile +# Register your models here. + +admin.site.register(Profile) \ No newline at end of file diff --git a/job_portal/users/apps.py b/job_portal/users/apps.py new file mode 100644 index 0000000..4ce1fab --- /dev/null +++ b/job_portal/users/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class UsersConfig(AppConfig): + name = 'users' diff --git a/job_portal/users/migrations/0001_initial.py b/job_portal/users/migrations/0001_initial.py new file mode 100644 index 0000000..dd592ba --- /dev/null +++ b/job_portal/users/migrations/0001_initial.py @@ -0,0 +1,25 @@ +# Generated by Django 3.1 on 2020-10-01 11:32 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Profile', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(default='', upload_to='profile_pics')), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/job_portal/users/migrations/__init__.py b/job_portal/users/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/job_portal/users/migrations/__pycache__/0001_initial.cpython-38.pyc b/job_portal/users/migrations/__pycache__/0001_initial.cpython-38.pyc new file mode 100644 index 0000000..62e95bd Binary files /dev/null and b/job_portal/users/migrations/__pycache__/0001_initial.cpython-38.pyc differ diff --git a/job_portal/users/migrations/__pycache__/__init__.cpython-38.pyc b/job_portal/users/migrations/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..3bb4faf Binary files /dev/null and b/job_portal/users/migrations/__pycache__/__init__.cpython-38.pyc differ diff --git a/job_portal/users/models.py b/job_portal/users/models.py new file mode 100644 index 0000000..8b1d46f --- /dev/null +++ b/job_portal/users/models.py @@ -0,0 +1,10 @@ +from django.db import models +from django.contrib.auth.models import User +# Create your models here. + +class Profile(models.Model): + user = models.OneToOneField(User, on_delete=models.CASCADE) + image = models.ImageField(default='', upload_to='profile_pics') + + def __str__(self): + return self.user.username diff --git a/job_portal/users/tests.py b/job_portal/users/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/job_portal/users/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/job_portal/users/views.py b/job_portal/users/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/job_portal/users/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.