Commit 28eda34d by Ba Toi Dang

Merge branch 'features/create_job_pages' into 'master'

Features/create job pages

See merge request !3
parents 91b545e3 044c9439
...@@ -20,6 +20,7 @@ gem 'figaro' ...@@ -20,6 +20,7 @@ gem 'figaro'
gem 'devise' gem 'devise'
gem 'carrierwave' gem 'carrierwave'
gem 'kaminari' gem 'kaminari'
gem "settingslogic"
group :development, :test do group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console # Call 'byebug' anywhere in the code to stop execution and get a debugger console
......
...@@ -141,6 +141,7 @@ GEM ...@@ -141,6 +141,7 @@ GEM
sprockets (>= 2.8, < 4.0) sprockets (>= 2.8, < 4.0)
sprockets-rails (>= 2.0, < 4.0) sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3) tilt (>= 1.1, < 3)
settingslogic (2.0.9)
spring (2.0.2) spring (2.0.2)
activesupport (>= 4.2) activesupport (>= 4.2)
spring-watcher-listen (2.0.1) spring-watcher-listen (2.0.1)
...@@ -185,6 +186,7 @@ DEPENDENCIES ...@@ -185,6 +186,7 @@ DEPENDENCIES
puma (~> 3.7) puma (~> 3.7)
rails (~> 5.1.4) rails (~> 5.1.4)
sass-rails (~> 5.0) sass-rails (~> 5.0)
settingslogic
spring spring
spring-watcher-listen (~> 2.0.0) spring-watcher-listen (~> 2.0.0)
tzinfo-data tzinfo-data
......
...@@ -12,3 +12,5 @@ ...@@ -12,3 +12,5 @@
// //
//= require rails-ujs //= require rails-ujs
//= require_tree . //= require_tree .
//= require javascripts/jquery-3.2.1.min.js
//= require javascripts/bootstrap.min.js
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
* vendor/assets/stylesheets directory can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
* files in this directory. Styles in this file should be added after the last require_* statement.
* It is generally better to create a new file per style scope.
*
*= require_tree .
*= require_self
*/
@import "stylesheets/bootstrap-theme.min.css";
@import "stylesheets/bootstrap.min.css";
@import "stylesheets/font-awesome.css";
.footer{
//position: absolute;
//bottom: 0;
width: 100%;
height: 60px;
line-height: 60px;
background-color: #f5f5f5;
}
.border_rd0{
border-radius: 0px!important;
}
.border_bot{
border-bottom: 1px solid #ccc!important;
}
.mr0{
margin: 0px;
}
.mrBot0{
margin-bottom: 0px!important;
}
.mrBot20{
margin-bottom: 20px;
}
.wid100{
width: 100% !important;
}
.wid80{
width: 80% !important;
}
// key-visual
.key-visual{
width: 100%;
height: 432px;
background: url('https://oejk4q.corednacdn.com/career-advice/web_images/blogs/214/1491/What-recruiters-look-for-in-a-cover-letter-1290x432.jpg') no-repeat center;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
}
.caption{
position: absolute;
left: 0;
top: 30%;
width: 100%;
text-align: center;
color: #000;
.border {
background-color: #111;
color: #fff;
padding: 18px;
font-size: 25px;
letter-spacing: 10px;
opacity: 0.65;
}
}
// end
// Search box
.search-box{
width: 100%;
height: 50px;
}// end
// City list
.city{
display: inline-block;
width: 100%;
}
.maxH109{
max-height: 109px;
}
.maxH89{
max-height: 89px;
}
// end
class CitiesController < ApplicationController
def index
@cities = City.city_list
end
end
class IndustriesController < ApplicationController
def index
@industries = Industry.industry_list
end
end
class JobsController < ApplicationController
before_action :set_job, only: [:show]
def index
@jobs = Job.top_list.includes(:company)
@cities = City.top_cities.includes(:country)
@industries = Industry.top_industries
end
def show
end
def city
city = City.find(params[:city_id])
@jobs = city.jobs.includes(:company).page(params[:page])
@result = "jobs/City/#{city.name}"
render template: "jobs/job_lists"
end
def industry
industry = Industry.find(params[:industry_id])
@jobs = industry.jobs.includes(:company).page(params[:page])
@result = "jobs/Industry/#{industry.name}"
render template: "jobs/job_lists"
end
def company
company = Company.find(params[:company_id])
@jobs = company.jobs.page(params[:page])
@result = "jobs/Company/#{company.name}"
render template: "jobs/job_lists"
end
def set_job
@job = Job.find(params[:id])
end
end
class CitiesJob < ApplicationRecord
belongs_to :city, counter_cache: :jobs_count
belongs_to :job
end
class City < ApplicationRecord class City < ApplicationRecord
belongs_to :country, optional: true belongs_to :country, optional: true
has_and_belongs_to_many :companies has_and_belongs_to_many :companies
has_and_belongs_to_many :jobs has_many :cities_jobs
has_many :jobs, through: :cities_jobs
scope :top_cities, -> { availble_job.
order(jobs_count: :desc).
limit(Settings.top.city_per_page) }
scope :city_list, -> { availble_job.
order(jobs_count: :desc, name: :asc) }
scope :availble_job, -> { where('jobs_count > 0')}
end end
class Country < ApplicationRecord class Country < ApplicationRecord
has_many :cities has_many :cities
VIETNAM = 'Viet Nam'
ANOTHER = 'another'
end end
class IndustriesJob < ApplicationRecord
belongs_to :industry, counter_cache: :jobs_count
belongs_to :job
end
class Industry < ApplicationRecord class Industry < ApplicationRecord
has_and_belongs_to_many :jobs has_many :industries_jobs
has_many :jobs, through: :industries_jobs
scope :top_industries, -> { availble_job.
order(jobs_count: :desc, name: :asc).
limit(Settings.top.industry_per_page) }
scope :industry_list, -> { availble_job.
order(jobs_count: :desc) }
scope :availble_job, -> { where('jobs_count > 0')}
end end
...@@ -4,8 +4,12 @@ class Job < ApplicationRecord ...@@ -4,8 +4,12 @@ class Job < ApplicationRecord
has_many :candidates, through: :apply_jobs, class_name: 'User', source: :user has_many :candidates, through: :apply_jobs, class_name: 'User', source: :user
has_many :favorite_jobs has_many :favorite_jobs
has_many :people_who_liked, through: :favorite_jobs, class_name: 'User', source: :user has_many :people_who_liked, through: :favorite_jobs, class_name: 'User', source: :user
has_and_belongs_to_many :industries has_many :industries_jobs
has_and_belongs_to_many :cities has_many :industries, through: :industries_jobs
has_many :cities_jobs
has_many :cities, through: :cities_jobs
scope :top_list, -> { order(updated_date: :desc).limit(Settings.top.job_per_page) }
def self.create_new_jobs(arr_jobs) def self.create_new_jobs(arr_jobs)
arr_jobs.each do |item| arr_jobs.each do |item|
...@@ -34,7 +38,6 @@ class Job < ApplicationRecord ...@@ -34,7 +38,6 @@ class Job < ApplicationRecord
description: item[:company_description]) description: item[:company_description])
end end
job.company = company job.company = company
job.company.cities << (job.cities - job.company.cities) job.company.cities << (job.cities - job.company.cities)
# Industry # Industry
......
class Settings < Settingslogic
source "#{Rails.root}/config/settings.yml"
namespace Rails.env
end
<div class="col-md-<%= column %>">
<div class="job-intro well mr0 mrBot20" id="vietnam">
<h4 class="mr0"><%= link_to city.name, city_jobs_path(city) %></h4>
<p>Jobs: <span class="badge"><%= city.jobs_count %></span></p>
</div>
</div>
<div class="row">
<div class="container">
<div class="country">
<%= link_to "Viet Nam", "#vietnam", class: "btn btn-default btn-lg" %>
<%= link_to "International", "#international", class: "btn btn-default btn-lg" %>
</div>
<br>
<div class="cities">
<div id="vietnam" class="city">
<p><h4>Viet Nam</h4></p>
<%- @cities.each do |city| -%>
<%- if city.country.name.eql?(Country::VIETNAM) -%>
<div class="col-md-3 maxH109">
<div class="job-intro well mr0 mrBot20 maxH89">
<h4 class="mr0"><%= link_to city.name, city_jobs_path(city) %></h4>
<p>Jobs: <span class="badge"><%= city.jobs_count %></span></p>
</div>
</div>
<%- end -%>
<%- end -%>
</div>
<div id="international" class="city">
<p><h4>International</h4></p>
<%- @cities.each do |city| -%>
<%- if city.country.name.eql?(Country::ANOTHER) -%>
<div class="col-md-3 maxH109">
<div class="job-intro well mr0 mrBot20 maxH89">
<h4 class="mr0"><%= link_to city.name, city_jobs_path(city) %></h4>
<p>Jobs: <span class="badge"><%= city.jobs_count %></span></p>
</div>
</div>
<%- end-%>
<%- end-%>
</div>
</div>
</div>
</div>
<div class="col-md-<%= column %> maxH109">
<div class="job-intro well mr0 mrBot20 maxH89">
<h4 class="mr0"><%= link_to industry.name, industry_jobs_path(industry) %></h4>
<p>Jobs: <span class="badge"><%= industry.jobs_count %></span></p>
</div>
</div>
<div class="row">
<div class="container">
<%= render @industries, column: 3 %>
</div>
</div>
<div class="job-intro well mr0 mrBot20">
<h4 class="mr0"><%= link_to job.name, job_path(job) %></h4>
<p><%= "Loacation: #{job.company.location}" %></p>
<p><%= "Salary: #{job.salary}" %></p>
</div>
<%= render "layouts/key_visual" %>
<div class="container">
<div class="top-page">
<!-- Search -->
<div class="panel border_bot clearfix">
<%= render @jobs %>
</div>
<!-- Cities -->
<div class="panel border_bot clearfix">
<%= render @cities, column: 3 %>
<%= link_to "All Cities", cities_path, class: "btn btn-default navbar-right" %>
</div>
<!-- Cities -->
<div class="panel">
<%= render @industries, column: 4 %>
<%= link_to "All Industries", industries_path, class: "btn btn-default navbar-right" %>
</div>
</div>
</div>
<div class="row">
<div class="container">
<p>
THIS IS A SEARCH BOX
</p>
<div class="job-list">
<p>
<span><%= "1. Total: #{@jobs.count}" %></span>
<span><%= "Result for: #{@result}" %></span>
</p>
<div class="top-page">
<div class="top-page-info">
</div>
</div>
<div class="pagination">
<%= paginate @jobs %>
</div>
<div class="jobs clearfix">
<%- @jobs.each do |job|-%>
<div class="job">
<div class="col-md-10 job-detail well">
<p><h4 class="mr0"><%= link_to job.name, job_path(job) %></h4></p>
<p><%= strip_tags(job.description)[0...250] %>...</p>
<p>
<span>Location: <%= "#{job.company.location}" %></span>
<span class="navbar-right">Salary: <%= job.salary %></span>
</p>
</div>
<div class="col-md-2 favorite">
<%= link_to "FAVORITE", "#", class: "btn btn-default" %>
</div>
</div>
<%- end -%>
</div>
<div class="pagination">
<%= paginate @jobs %>
</div>
</div>
</div>
</div>
<div class="row">
<div class="container">
<ol class="breadcrumb">
<li><a href="/">TOP</a></li>
<li>
<%- @job.cities.each_with_index do |city, index| -%>
<%= "#{index > 0 ? ',' : ''}" %>
<%= link_to city.name, city_jobs_path(city) %>
<%- end -%>
</li>
<li>
<%- @job.industries.each_with_index do |industry, index| -%>
<%= "#{index > 0 ? ',' : ''}" %>
<%= link_to industry.name, industry_jobs_path(industry) %>
<%- end -%>
</li>
<li><%= @job.name %></li>
</ol>
</ol>
<div class="job">
<div class="col-md-9">
<h1>2.<%= @job.name %></h1>
<p>3.<%= link_to @job.company.name, company_jobs_path(@job.company) %></p>
<p>4. Location:
<%- @job.cities.each_with_index do |city, index| -%>
<%= "#{index > 0 ? ',' : ''}" %>
<%= link_to city.name, city_jobs_path(city) %>
<%- end -%>
</p>
<p>5. Salary: <%= @job.salary %></p>
<p>6 Long Description:
<%= @job.description.html_safe %>
</p>
</div>
<div class="col-md-3">
<%= link_to "Apply", "#", class: "btn btn-primary btn-lg" %>
</div>
<div class="action">
<div class="col-md-6">
<%= link_to "Apply", "#", class: "btn btn-default btn-lg" %>
</div>
<div class="col-md-6">
<%= link_to "Favorite", "#", class: "btn btn-default btn-lg" %>
</div>
</div>
</div>
</div>
</div>
<li class="page-item">
<%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, remote: remote, class: 'page-link' %>
</li>
<li class='page-item disabled'>
<%= link_to raw(t 'views.pagination.truncate'), '#', class: 'page-link' %>
</li>
<li class="page-item">
<%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, remote: remote, class: 'page-link' %>
</li>
<li class="page-item">
<%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, rel: 'next', remote: remote, class: 'page-link' %>
</li>
<% if page.current? %>
<li class="page-item active">
<%= content_tag :a, page, remote: remote, rel: (page.next? ? 'next' : (page.prev? ? 'prev' : nil)), class: 'page-link' %>
</li>
<% else %>
<li class="page-item">
<%= link_to page, url, remote: remote, rel: (page.next? ? 'next' : (page.prev? ? 'prev' : nil)), class: 'page-link' %>
</li>
<% end %>
<%= paginator.render do %>
<nav>
<ul class="pagination">
<%= first_page_tag unless current_page.first? %>
<%= prev_page_tag unless current_page.first? %>
<% each_page do |page| %>
<% if page.left_outer? || page.right_outer? || page.inside_window? %>
<%= page_tag page %>
<% elsif !page.was_truncated? -%>
<%= gap_tag %>
<% end %>
<% end %>
<%= next_page_tag unless current_page.last? %>
<%= last_page_tag unless current_page.last? %>
</ul>
</nav>
<% end %>
<li class="page-item">
<%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, rel: 'prev', remote: remote, class: 'page-link' %>
</li>
<div class="footer">
<div class="container-fluid">
<div class="footer-bottom">
<p class="pull-left"> Footer </p>
<div class="pull-right">
ZIGExN VeNtura
</div>
</div>
</div>
</div>
<div class="img-responsive key-visual">
<div class="caption">
<span class="border">Total jobs: 150</span>
</div>
</div>
<nav class="navbar navbar-inverse border_rd0 mrBot0">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="/">WorldJob</a>
</div>
<ul class="nav navbar-nav">
<li class="active"><a href="/">Home</a></li>
</ul>
<!-- check an user is logged in or not -->
<ul class="nav navbar-nav navbar-right">
<%- if current_user -%>
<li><a href="#"><i class="fa fa-sign-in" aria-hidden="true"></i> My Page</a></li>
<li><a href="#"><i class="fa fa-plus" aria-hidden="true"></i> Logout</a></li>
<%- else -%>
<li><a href="#"><i class="fa fa-sign-in" aria-hidden="true"></i> Login</a></li>
<li><a href="#"><i class="fa fa-plus" aria-hidden="true"></i> Register</a></li>
<%- end -%>
<li><a href="#"><i class="fa fa-star" aria-hidden="true"></i></span> Favorite</a></li>
<li><a href="#"><i class="fa fa-history" aria-hidden="true"></i></span> History</a></li>
</ul>
</div>
</nav>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">WebSiteName</a>
</div>
<ul class="nav navbar-nav navbar-right">
<li><a href="#"><span class="glyphicon glyphicon-user"></span> Sign Up</a></li>
<li><a href="#"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>
</ul>
</div>
</nav>
<div class="search-box">
<%= form_tag nil, method: :get, class: "navbar-form navbar-left search-form wid100" do %>
<%= text_field_tag(
:search,
params[:search],
placeholder: "Search",
class: "form-control wid80"
) %>
<%= submit_tag "Search", class: "btn btn-default"%>
<% end %>
</div>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Venjob</title> <title>Venjob</title>
<%= csrf_meta_tags %> <%= csrf_meta_tags %>
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
</head> </head>
<body> <body>
<%= yield %> <%= render "layouts/menu" %>
</body> <%= yield %>
<%= render "layouts/footer" %>
</body>
</html> </html>
...@@ -14,5 +14,6 @@ module Venjob ...@@ -14,5 +14,6 @@ module Venjob
# Settings in config/environments/* take precedence over those specified here. # Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers # Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded. # -- all .rb files in that directory are automatically loaded.
config.assets.paths << Rails.root.join('vendor', 'assets')
end end
end end
# frozen_string_literal: true
Kaminari.configure do |config|
config.default_per_page = 20
# config.max_per_page = nil
# config.window = 4
# config.outer_window = 0
# config.left = 0
# config.right = 0
# config.page_method_name = :page
# config.param_name = :page
# config.params_on_first_page = false
end
Rails.application.routes.draw do Rails.application.routes.draw do
root 'jobs#index'
devise_for :users devise_for :users
resources :cities, only: [:index, :show]
resources :industries, only: [:index, :show]
resources :jobs do
collection do
get 'city/:city_id' => "jobs#city", as: :city
get 'industry/:industry_id' => "jobs#industry", as: :industry
get 'company/:company_id' => "jobs#company", as: :company
end
end
end end
defaults: &defaults
top:
job_per_page: 5
industry_per_page: 9
city_per_page: 9
development:
<<: *defaults
test:
<<: *defaults
production:
<<: *defaults
class AddJobsCountToCities < ActiveRecord::Migration[5.1]
def change
add_column :cities, :jobs_count, :integer, default: 0
end
end
class AddJobsCountToIndustries < ActiveRecord::Migration[5.1]
def change
add_column :industries, :jobs_count, :integer, default: 0
end
end
class AddIndexToCities < ActiveRecord::Migration[5.1]
def change
add_index :cities, :jobs_count
end
end
class AddIndexToIndustries < ActiveRecord::Migration[5.1]
def change
add_index :industries, :jobs_count
end
end
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20171005085453) do ActiveRecord::Schema.define(version: 20171016091830) do
create_table "apply_jobs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "apply_jobs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.bigint "job_id" t.bigint "job_id"
...@@ -27,21 +27,23 @@ ActiveRecord::Schema.define(version: 20171005085453) do ...@@ -27,21 +27,23 @@ ActiveRecord::Schema.define(version: 20171005085453) do
t.bigint "country_id" t.bigint "country_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "jobs_count", default: 0
t.index ["country_id"], name: "index_cities_on_country_id" t.index ["country_id"], name: "index_cities_on_country_id"
t.index ["jobs_count"], name: "index_cities_on_jobs_count"
end end
create_table "cities_companies", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "cities_companies", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.bigint "city_id", null: false t.bigint "company_id"
t.bigint "company_id", null: false t.bigint "city_id"
t.index ["city_id", "company_id"], name: "index_cities_companies_on_city_id_and_company_id" t.index ["city_id"], name: "index_cities_companies_on_city_id"
t.index ["company_id", "city_id"], name: "index_cities_companies_on_company_id_and_city_id" t.index ["company_id"], name: "index_cities_companies_on_company_id"
end end
create_table "cities_jobs", id: false, force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "cities_jobs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.bigint "job_id", null: false t.bigint "job_id"
t.bigint "city_id", null: false t.bigint "city_id"
t.index ["city_id", "job_id"], name: "index_cities_jobs_on_city_id_and_job_id" t.index ["city_id"], name: "index_cities_jobs_on_city_id"
t.index ["job_id", "city_id"], name: "index_cities_jobs_on_job_id_and_city_id" t.index ["job_id"], name: "index_cities_jobs_on_job_id"
end end
create_table "companies", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "companies", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
...@@ -71,6 +73,8 @@ ActiveRecord::Schema.define(version: 20171005085453) do ...@@ -71,6 +73,8 @@ ActiveRecord::Schema.define(version: 20171005085453) do
t.string "name" t.string "name"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.integer "jobs_count", default: 0
t.index ["jobs_count"], name: "index_industries_on_jobs_count"
end end
create_table "industries_jobs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "industries_jobs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
...@@ -112,6 +116,10 @@ ActiveRecord::Schema.define(version: 20171005085453) do ...@@ -112,6 +116,10 @@ ActiveRecord::Schema.define(version: 20171005085453) do
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.string "cv" t.string "cv"
t.string "name" t.string "name"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true
t.index ["email"], name: "index_users_on_email", unique: true t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end end
......
...@@ -7,4 +7,14 @@ namespace :data do ...@@ -7,4 +7,14 @@ namespace :data do
@data = Crawler.crawl_job_infomation(links) @data = Crawler.crawl_job_infomation(links)
Job.create_new_jobs(@data) Job.create_new_jobs(@data)
end end
desc "reset counter industry"
task reset_counter_industry: :environment do |t|
Industry.find_each { |industry| Industry.reset_counters(industry.id, :jobs) }
end
desc "reset counter city"
task reset_counter_job: :environment do |t|
City.find_each { |city| City.reset_counters(city.id, :jobs) }
end
end end
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
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