Commit 0cb127f4 by Mai Hoang Thai Ha

new UI

parent cb090628
...@@ -69,4 +69,4 @@ gem 'rsolr', '~> 2.3' ...@@ -69,4 +69,4 @@ gem 'rsolr', '~> 2.3'
gem 'rsolr-ext', '~> 1.0', '>= 1.0.3' gem 'rsolr-ext', '~> 1.0', '>= 1.0.3'
gem 'font-awesome-rails', '~> 4.7', '>= 4.7.0.7' gem 'font-awesome-rails', '~> 4.7', '>= 4.7.0.7'
gem 'bootstrap', '~> 4.4.1' gem 'bootstrap', '~> 4.4.1'
gem 'jquery-rails' gem 'jquery-rails', '~> 4.4'
\ No newline at end of file
...@@ -333,7 +333,7 @@ DEPENDENCIES ...@@ -333,7 +333,7 @@ DEPENDENCIES
font-awesome-rails (~> 4.7, >= 4.7.0.7) font-awesome-rails (~> 4.7, >= 4.7.0.7)
httparty (~> 0.18.1) httparty (~> 0.18.1)
jbuilder (~> 2.7) jbuilder (~> 2.7)
jquery-rails jquery-rails (~> 4.4)
kaminari! kaminari!
listen (~> 3.3) listen (~> 3.3)
mysql2 (~> 0.5) mysql2 (~> 0.5)
......
@import "bootstrap";
@import "font-awesome";
@import "./scss/style.scss";
/* /*
* This is a manifest file that'll be compiled into application.css, which will include all the files * This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below. * listed below.
...@@ -12,11 +15,6 @@ ...@@ -12,11 +15,6 @@
*= *=
*= require top *= require top
*= require_self *= require_self
*= require_tree .
*= require font-awesome *= require font-awesome
*/ */
\ No newline at end of file
@import "bootstrap";
@import "font-awesome";
@import "./scss/style.scss";
@import "./applies.scss"
\ No newline at end of file
// Top page
// search
// banner
.banner {
background-image: url('banner.jpg');
min-height: 200px;
background-repeat: no-repeat;
background-size: cover;
}
// latest-job
.latest-job {
.job-item {
font-size: 14px;
.job-title {
text-decoration: none;
color: black;
font-size: 20px;
font-weight: 500;
}
.job-caption {
line-height: 18px;
.job-company {
text-decoration: none;
font-size: 14px;
color: #495057;
}
.job-salary {
color: #008563;
margin: 0;
}
.job-locations {
ul {
list-style: none;
margin: 0 0 6px 0;
padding: 0;
color: #495057;
}
}
.job-desc {
overflow: hidden;
text-overflow: ellipsis;
line-height: 18px;
-webkit-line-clamp: 2;
max-height: 36px;
display: -webkit-box;
-webkit-box-orient: vertical;
}
}
}
}
// top_cities
.top_cities {
.city-item {
margin-bottom: 12px;
a {
font-size: 18px;
text-decoration: none;
color: #287ab9;
margin: 10px 0;
}
}
.all-cities-btn {
color: #287ab9;
font-size: 20px;
text-decoration: none;
}
.all-cities-btn:hover {
text-decoration: underline;
}
}
// top_industries
.top_industries {
.industry-item {
margin-bottom: 12px;
a {
font-size: 18px;
text-decoration: none;
color: #287ab9;
margin: 10px 0;
}
}
.all-industries-btn {
color: #287ab9;
font-size: 20px;
text-decoration: none;
}
.all-industries-btn:hover {
text-decoration: underline;
}
}
- provide(:title, 'User Apply Jobs') - provide(:title, 'User Apply Jobs')
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] = render 'shared/page_heading', title: 'APPlIED JOBS', url: apply_jobs_path
.container
.page-heading-content.text-center
h3.title
| APPlIED JOBS
ol.breadcrumb
li.breadcrumb-item
= link_to 'Home', root_path
li.breadcrumb-item.active
| APPlIED JOBS
.section.section-padding .section.section-padding
.container .container
......
- provide(:title, 'Cities')
= render 'shared/page_heading', title: 'Cities', url: cities_path
/region /region
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"]
.container
.page-heading-content.text-center
h3.title
| CITIES
ol.breadcrumb
li.breadcrumb-item
= link_to 'Home', root_path
li.breadcrumb-item.active
| CITIES
.section.section-padding .section.section-padding
.container .container
.countries-list .countries-list
......
- provide(:title, 'History page') - provide(:title, 'History page')
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] = render 'shared/page_heading', title: 'FAVORITE', url: favorite_jobs_path
.container
.page-heading-content.text-center
h3.title
| FAVORITE
ol.breadcrumb
li.breadcrumb-item
= link_to 'Home', root_path
li.breadcrumb-item.active
| FAVORITE
- if @favorite_jobs.empty? - if @favorite_jobs.empty?
.section.section-padding .section.section-padding
.container .container.text-center
h2 You have not applied for any job yet h2 You have not applied for any job yet
= link_to 'See more jobs', jobs_path, class: 'btn btn-primary' = link_to 'See more jobs', jobs_path, class: 'btn btn-primary m-3'
- else - else
= render partial: 'shared/jobs_list_index', object: @favorite_jobs, as: 'jobs' = render partial: 'shared/jobs_list_index', object: @favorite_jobs, as: 'jobs'
- provide(:title, 'History page') - provide(:title, 'History page')
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] = render 'shared/page_heading', title: 'HISTORY', url: history_jobs_path
.container
.page-heading-content.text-center
h3.title
| HISTORY
ol.breadcrumb
li.breadcrumb-item
= link_to 'Home', root_path
li.breadcrumb-item.active
| HISTORY
- if @history_jobs.empty? - if @history_jobs.empty?
.section.section-padding .section.section-padding
.container .container.text-center
h2 No jobs in your history h2 No jobs in your history
- else - else
= render partial: 'shared/jobs_list_index', object: @history_jobs, as: 'jobs' = render partial: 'shared/jobs_list_index', object: @history_jobs, as: 'jobs'
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] - provide(:title, 'Industries')
.container
.page-heading-content.text-center = render 'shared/page_heading', title: 'INDUSTRIES', url: industries_path
h3.title
| INDUSTRIES
ol.breadcrumb
li.breadcrumb-item
= link_to 'Home', root_path
li.breadcrumb-item.active
| INDUSTRIES
.section.section-padding .section.section-padding
.container .container
......
- provide(:title, 'Job list page') - provide(:title, 'Job list page')
/ search box / search box
= render 'shared/page_heading', title: 'Jobs', url: jobs_path, name: @name
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] / .page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"]
.container / .container
.page-heading-content.text-center / .page-heading-content.text-center
h3.title / h3.title
| Browse Jobs / | Browse Jobs
ol.breadcrumb / ol.breadcrumb
li.breadcrumb-item / li.breadcrumb-item
= link_to 'Home', root_path / = link_to 'Home', root_path
li.breadcrumb-item.active / li.breadcrumb-item.active
= link_to 'Jobs', jobs_path / = link_to 'Jobs', jobs_path
- if params[:city_slug] || params[:industry_slug] / - if params[:city_slug] || params[:industry_slug]
li.breadcrumb-item.active / li.breadcrumb-item.active
= @name / = @name
= render 'shared/search' = render 'shared/search'
.section.section-padding .section.section-padding
......
...@@ -6,7 +6,5 @@ div id="favorite-#{job_id}" ...@@ -6,7 +6,5 @@ div id="favorite-#{job_id}"
i.fa.fa-heart-o.mr-1 i.fa.fa-heart-o.mr-1
| Favorite | Favorite
/ = form_with(model: @favorite_job, url: favorite_jobs_path(job_id: job_id), id: "favorite-#{job_id}", remote: true) do |f|
/ a.d-block.btn.btn-outline-secondary[href="#"] / = f.submit 'Favorite', class: 'd-block btn btn-outline-secondary'
/ i.fa.fa-heart-o.mr-1
/ | Save Job
\ No newline at end of file
.page-heading-section.section.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] .page-heading-section.section.bg-parallax[data-bg-image="assets/banner-4.jpg" data-overlay="50"]
.container .container
.page-heading-content.text-center .page-heading-content.text-center
h3.title h3.title
...@@ -7,4 +7,7 @@ ...@@ -7,4 +7,7 @@
li.breadcrumb-item li.breadcrumb-item
= link_to 'Home', root_path = link_to 'Home', root_path
li.breadcrumb-item.active li.breadcrumb-item.active
= title = link_to title, url
\ No newline at end of file - if params[:city_slug] || params[:industry_slug]
li.breadcrumb-item.active
= name
\ No newline at end of file
...@@ -4,3 +4,5 @@ div id="unfavorite-#{job_id}" ...@@ -4,3 +4,5 @@ div id="unfavorite-#{job_id}"
remote: true, remote: true,
class: 'btn btn-secondary' class: 'btn btn-secondary'
| UnFavorite | UnFavorite
/ = form_with(model: @favorite_job, url: favorite_job_path(current_user, job_id: job_id), id: "unfavorite-#{job_id}", method: :delete, remote: true) do |f|
/ = f.submit 'UnFavorite', class: 'btn btn-secondary'
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/ banner / banner
.slider-section.section .slider-section.section
.slide-item.bg-parallax[data-bg-image="assets/images/slider/slider-1.jpg" data-overlay="50"] .slide-item.bg-parallax[data-bg-image="assets/banner-1" data-overlay="50"]
.container .container
.slider-content.text-center .slider-content.text-center
h2.title h2.title
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
= link_to 'View All Jobs', jobs_path , class: 'btn btn-primary' = link_to 'View All Jobs', jobs_path , class: 'btn btn-primary'
/ count / count
.section.section-padding.bg-parallax[data-bg-image="assets/images/bg/bg-1.jpg" data-overlay="50"] .section.section-padding.bg-parallax[data-bg-image="assets/banner-2.jpg" data-overlay="50"]
.container .container
.funfact-wrap.row .funfact-wrap.row
.funfact.col-md-3.col-sm-6.col-12 .funfact.col-md-3.col-sm-6.col-12
...@@ -96,36 +96,36 @@ ...@@ -96,36 +96,36 @@
= link_to 'See all industries', industries_path, class:'btn btn-primary' = link_to 'See all industries', industries_path, class:'btn btn-primary'
/ quotes / quotes
.section.section-padding.bg-parallax[data-bg-image="assets/images/bg/bg-2.jpg" data-overlay="65"] .section.section-padding.bg-parallax[data-bg-image="assets/banner-3.jpg" data-overlay="65"]
.container .container
.testimonial-slider.row .testimonial-slider.row
.col .col
.testimonial.text-center.text-white .testimonial.text-center.text-white
p p
| Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem
img[src="assets/images/authors/author-1.jpg" alt=""] = image_tag('avt')
h6.name h6.name
| Sharon Harper | Ha Mai
span.title span.title
| Marketer of Hastech | Marketer of VeNJob
.col .col
.testimonial.text-center.text-white .testimonial.text-center.text-white
p p
| Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem
img[src="assets/images/authors/author-2.jpg" alt=""] = image_tag('avt')
h6.name h6.name
| Harold McCoy | Ha Mai
span.title span.title
| CEO of Hastech | CEO of VeNJob
.col .col
.testimonial.text-center.text-white .testimonial.text-center.text-white
p p
| Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Obcaecati, modi sed praesentium necessitatibus tenetur neque, veritatis esse voluptatem
img[src="assets/images/authors/author-3.jpg" alt=""] = image_tag('avt')
h6.name h6.name
| Ronald Wright | Ha Mai
span.title span.title
| Admin of Hastech | Admin of VeNJob
/ cities / cities
......
- provide(:title, 'Resend confirmation instructions') - provide(:title, 'Resend confirmation instructions')
= render 'shared/page_heading', title: 'Resend' = render 'shared/page_heading', title: 'Resend', url: new_user_confirmation_path
.section.section-padding .section.section-padding
.container .container
......
- provide(:title, 'Forgot password') - provide(:title, 'Forgot password')
= render 'shared/page_heading', title: 'Forgot password' = render 'shared/page_heading', title: 'Forgot password', ulr: forgot_password_path
.section.section-padding .section.section-padding
.container .container
......
- provide(:title, 'Edit profile') - provide(:title, 'Edit profile')
.container = render 'shared/page_heading', title: "Edit #{resource_name.to_s.humanize}", url: login_path
.section.section-padding
.container
.row.justify-content-center .row.justify-content-center
.col-8 .col-lg-8.col-sm-8.col-12.flex-grow-1.mb-4
h2.text-center.my-5
| Edit
= resource_name.to_s.humanize
= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| = form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f|
= render 'users/shared/error_messages', resource: resource = render 'users/shared/error_messages', resource: resource
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
.text-info.text-center.mb-2
| Currently waiting confirmation for:
= resource.unconfirmed_email
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :email, class: 'form-label' = f.label :email, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control mb-2' = f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control mb-2'
span.form-msg span.form-msg
.field.row.mb-2.form-group .field.row.mb-2.form-group
- if devise_mapping.confirmable? && resource.pending_reconfirmation?
div
| Currently waiting confirmation for:
= resource.unconfirmed_email
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :name, class: 'form-label' = f.label :name, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.text_field :name, autofocus: true, autocomplete: 'name', class: 'form-control mb-2' = f.text_field :name, autofocus: true, autocomplete: 'name', class: 'form-control mb-2'
span.form-msg span.form-msg
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :address, class: 'form-label' = f.label :address, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.text_field :address, autofocus: true, autocomplete: 'address', class: 'form-control mb-2' = f.text_field :address, autofocus: true, autocomplete: 'address', class: 'form-control mb-2'
span.form-msg span.form-msg
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :phone, class: 'form-label' = f.label :phone, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.text_field :phone, autofocus: true, autocomplete: 'phone', class: 'form-control mb-2' = f.text_field :phone, autofocus: true, autocomplete: 'phone', class: 'form-control mb-2'
span.form-msg span.form-msg
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :cv, class: 'form-label' = f.label :cv, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.file_field :cv, accept: ApplyJob::ACCEPT_CONTENT_TYPE, class: 'form-control', direct_upload: true = f.file_field :cv, accept: ApplyJob::ACCEPT_CONTENT_TYPE, direct_upload: true
span.form-msg
.row.my-4.justify-content-end .row.my-4.justify-content-end
.col-9 .col-lg-9.col-sm-9.col-12
hr hr
p p
|(leave password blank if you don't want to change it) |(leave password blank if you don't want to change it)
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :password, class: 'form-label' = f.label :password, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.password_field :password, autocomplete: 'new-password', class: 'form-control mb-2' = f.password_field :password, autocomplete: 'new-password', class: 'form-control mb-2'
span.form-msg span.form-msg
.field.row.mb-2.form-group .field.row.mb-2.form-group
.col-3 .col-lg-3.col-sm-3.col-12
= f.label :password_confirmation, class: 'form-label' = f.label :password_confirmation, class: 'form-label'
.col-9 .col-lg-9.col-sm-9.col-12
= f.password_field :password_confirmation, autocomplete: 'new-password', class: 'form-control mb-2' = f.password_field :password_confirmation, autocomplete: 'new-password', class: 'form-control mb-2'
span.form-msg span.form-msg
.actions.row.justify-content-end .actions.row.justify-content-end
.col-9 .col-lg-9.col-12
= f.submit 'Done', class: 'btn btn-primary w-50 my-4', data: { disable_with: false } = f.submit 'Done', class: 'btn btn-primary w-100 my-4', data: { disable_with: false }
hr hr
h3 .text-center
| Delete my account h3 Delete my account
p p
| Click the button below to delete account | Click the button below to delete account
= button_to 'Delete', registration_path(resource_name), data: { confirm: 'Are you sure?' }, method: :delete, class: 'btn btn-primary w-100 my-4' = button_to 'Delete', registration_path(resource_name), data: { confirm: 'Are you sure?' }, method: :delete, class: 'btn btn-primary w-100 my-4'
= link_to 'Home', :back
javascript: javascript:
Validator({ Validator({
......
- provide(:title, 'Sign Up') - provide(:title, 'Sign Up')
= render 'shared/page_heading', title: 'Signup' = render 'shared/page_heading', title: 'Signup', url: signup_path
.section.section-padding .section.section-padding
...@@ -9,10 +9,24 @@ ...@@ -9,10 +9,24 @@
.col-lg-6.col-sm-6.col-12.flex-grow-1.mb-4 .col-lg-6.col-sm-6.col-12.flex-grow-1.mb-4
= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|
= render 'users/shared/error_messages', resource: resource = render 'users/shared/error_messages', resource: resource
.field .field.row.form-group.mb-4
.col-lg-2.col-sm-2.col-12
= f.label :email, class: 'form-label' = f.label :email, class: 'form-label'
br .col-lg-10.col-sm-10.col-12
= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control mb-2' = f.email_field :email, autofocus: true, autocomplete: 'email', class: 'form-control mb-2'
.actions span.form-msg
= f.submit 'Sign up', class: 'btn btn-primary w-100 my-5' .field
= render 'users/shared/links' = render 'users/shared/links'
.actions.row.justify-content-end
.col-lg-10.col-12.d-flex.justify-content-around
= f.submit 'Sign up', class: 'btn btn-primary w-100 my-5'
javascript:
Validator({
form: '#new_user',
errorSelector: '.form-msg',
rules: [
Validator.isRequired('#user_email'),
Validator.isEmail('#user_email')
]
})
- provide(:title, 'Log in') - provide(:title, 'Log in')
= render 'shared/page_heading', title: 'Login' = render 'shared/page_heading', title: 'Login', url: login_path
.section.section-padding .section.section-padding
.container .container
......
- content_for :head do - content_for :head do
= stylesheet_link_tag 'users' = stylesheet_link_tag 'users'
= render 'shared/page_heading', title: 'User' = render 'shared/page_heading', title: 'User', url: user_profile_path
.section.py-5 .section.py-5
.container .container
.main-body .main-body
......
...@@ -7,7 +7,8 @@ Rails.application.configure do ...@@ -7,7 +7,8 @@ Rails.application.configure do
# it changes. This slows down response time but is perfect for development # it changes. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes. # since you don't have to restart the web server when you make code changes.
config.cache_classes = false config.cache_classes = false
# ngrok
config.hosts = nil
# Do not eager load code on boot. # Do not eager load code on boot.
config.eager_load = false config.eager_load = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment