Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
V
venjob_nth
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
3
Merge Requests
3
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ngô Trung Hưng
venjob_nth
Commits
e17efe61
Commit
e17efe61
authored
Aug 21, 2020
by
Ngô Trung Hưng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
apply job in list favorited
parent
d0f4baff
Pipeline
#980
canceled with stages
in 0 seconds
Changes
19
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
53 additions
and
109 deletions
+53
-109
app/assets/javascripts/custom.js
+1
-1
app/assets/stylesheets/custom_btn.scss
+6
-6
app/assets/stylesheets/favorite.scss
+11
-4
app/controllers/application_controller.rb
+0
-22
app/controllers/apply_job_controller.rb
+1
-0
app/controllers/favorite_controller.rb
+2
-2
app/controllers/sessions_controller.rb
+0
-31
app/views/favorite/index.html.erb
+6
-7
app/views/home/index.html.erb
+1
-0
app/views/job/_block_info_job.html.erb
+2
-2
app/views/job/_block_job_mini.html.erb
+4
-4
app/views/job/_link_create.html.erb
+1
-2
app/views/job/_link_create_favorite_in_detail.html.erb
+1
-2
app/views/job/_link_destroy.html.erb
+1
-2
app/views/job/_link_destroy_favorite_in_detail.html.erb
+1
-2
app/views/job/_modal_login.html.erb
+2
-1
app/views/shared/_loading.html.erb
+10
-18
config/initializers/devise.rb
+2
-2
config/routes.rb
+1
-1
No files found.
app/assets/javascripts/custom.js
View file @
e17efe61
$
(
document
).
on
(
"turbolinks:load"
,
function
(){
$
(
document
).
on
(
"turbolinks:load"
,
function
(){
$
(
'.
block
_click_favorite'
).
click
(
function
(
e
)
{
$
(
'.
span
_click_favorite'
).
click
(
function
(
e
)
{
$
(
'.overlay_login'
).
addClass
(
'show'
);
$
(
'.overlay_login'
).
addClass
(
'show'
);
});
});
...
...
app/assets/stylesheets/custom_btn.scss
View file @
e17efe61
...
@@ -103,12 +103,9 @@
...
@@ -103,12 +103,9 @@
color
:
#666
;
color
:
#666
;
font-size
:
17px
;
font-size
:
17px
;
color
:
rgb
(
60
,
71
,
121
);
color
:
rgb
(
60
,
71
,
121
);
span
{
}
}
}
.modal_login_header
{
.modal_login_header
{
background-color
:
#
eee
;
background-color
:
#
d2d2d2
;
height
:
30px
;
height
:
30px
;
line-height
:
30px
;
line-height
:
30px
;
text-align
:
center
;
text-align
:
center
;
...
@@ -117,8 +114,10 @@
...
@@ -117,8 +114,10 @@
font-weight
:
600
;
font-weight
:
600
;
font-family
:
'Raleway'
,
sans-serif
;
font-family
:
'Raleway'
,
sans-serif
;
}
}
@media
only
screen
and
(
max-width
:
992px
)
{
@media
only
screen
and
(
max-width
:
400px
)
{
.modal_login_notice_text
{
font-size
:
15px
;
}
}
}
@media
only
screen
and
(
max-width
:
768px
)
{
@media
only
screen
and
(
max-width
:
768px
)
{
...
@@ -160,6 +159,7 @@
...
@@ -160,6 +159,7 @@
}
}
.btn-info-custom
{
.btn-info-custom
{
margin-bottom
:
10px
;
width
:
100%
!
important
;
width
:
100%
!
important
;
}
}
.btn-custom-padding
{
.btn-custom-padding
{
...
...
app/assets/stylesheets/favorite.scss
View file @
e17efe61
...
@@ -13,14 +13,13 @@
...
@@ -13,14 +13,13 @@
margin
:
auto
;
margin
:
auto
;
position
:
relative
;
position
:
relative
;
top
:
50%
;
top
:
50%
;
left
:
8
0%
;
left
:
5
0%
;
transform
:
translateY
(
-50%
);
transform
:
translateY
(
-50%
);
}
}
.radio_id
{
.radio_id
{
position
:
relative
;
position
:
relative
;
z-index
:
999999999999
;
z-index
:
999999999999
;
top
:
50px
;
// top: 50px;
}
}
[
type
=
"radio"
]
{
[
type
=
"radio"
]
{
cursor
:
pointer
;
cursor
:
pointer
;
...
@@ -33,9 +32,17 @@
...
@@ -33,9 +32,17 @@
transition
:
ease-in
0
.3s
;
transition
:
ease-in
0
.3s
;
}
}
.span_click_favorite
{
&
:hover
{
cursor
:
pointer
;
transform
:
rotateY
(
360deg
);
transition
:
ease-in-out
;
}
}
@media
only
screen
and
(
max-width
:
992px
)
{
@media
only
screen
and
(
max-width
:
992px
)
{
.container
{
.container
{
.btn_apply_job
{
.btn_apply_job
.in_favorite
{
display
:
none
;
display
:
none
;
}
}
}
}
...
...
app/controllers/application_controller.rb
View file @
e17efe61
...
@@ -6,7 +6,6 @@ class ApplicationController < ActionController::Base
...
@@ -6,7 +6,6 @@ class ApplicationController < ActionController::Base
before_action
:configure_permitted_parameters
,
if: :devise_controller?
before_action
:configure_permitted_parameters
,
if: :devise_controller?
before_action
:set_locale
before_action
:set_locale
before_action
:store_user_location!
,
if: :storable_location?
def
set_locale
def
set_locale
locale
=
(
user_signed_in?
?
current_user
.
language
:
params
[
:locale
].
to_s
.
strip
).
to_sym
locale
=
(
user_signed_in?
?
current_user
.
language
:
params
[
:locale
].
to_s
.
strip
).
to_sym
...
@@ -17,31 +16,10 @@ class ApplicationController < ActionController::Base
...
@@ -17,31 +16,10 @@ class ApplicationController < ActionController::Base
{
locale:
I18n
.
locale
}
{
locale:
I18n
.
locale
}
end
end
def
authenticate_user!
return
redirect_to
new_user_session_path
unless
user_signed_in?
super
end
protected
protected
def
configure_permitted_parameters
def
configure_permitted_parameters
devise_parameter_sanitizer
.
permit
(
:sign_up
)
{
|
u
|
u
.
permit
(
:name
,
:email
,
:cv
,
:password
)
}
devise_parameter_sanitizer
.
permit
(
:sign_up
)
{
|
u
|
u
.
permit
(
:name
,
:email
,
:cv
,
:password
)
}
devise_parameter_sanitizer
.
permit
(
:account_update
)
{
|
u
|
u
.
permit
(
:name
,
:email
,
:cv
,
:password
,
:current_password
)
}
devise_parameter_sanitizer
.
permit
(
:account_update
)
{
|
u
|
u
.
permit
(
:name
,
:email
,
:cv
,
:password
,
:current_password
)
}
end
end
private
# Its important that the location is NOT stored if:
# - The request method is not GET (non idempotent)
# - The request is handled by a Devise controller such as Devise::SessionsController as that could cause an
# infinite redirect loop.
# - The request is an Ajax request as this can lead to very unexpected behaviour.
def
storable_location?
request
.
get?
&&
is_navigational_format?
&&
!
devise_controller?
&&
!
request
.
xhr?
end
def
store_user_location!
# :user is the scope we are authenticating
store_location_for
(
:user
,
request
.
fullpath
)
end
end
end
app/controllers/apply_job_controller.rb
View file @
e17efe61
...
@@ -10,6 +10,7 @@ class ApplyJobController < ApplicationController
...
@@ -10,6 +10,7 @@ class ApplyJobController < ApplicationController
def
apply
def
apply
return
redirect_to
root_path
if
params
[
:job_id
].
blank?
return
redirect_to
root_path
if
params
[
:job_id
].
blank?
@data_apply
=
current_user
.
applied_jobs
.
new
(
name:
current_user
.
name
,
email:
current_user
.
email
)
@data_apply
=
current_user
.
applied_jobs
.
new
(
name:
current_user
.
name
,
email:
current_user
.
email
)
session
[
:job_id
]
=
params
[
:job_id
]
session
[
:job_id
]
=
params
[
:job_id
]
@job
=
Job
.
find
(
params
[
:job_id
])
@job
=
Job
.
find
(
params
[
:job_id
])
...
...
app/controllers/favorite_controller.rb
View file @
e17efe61
...
@@ -13,14 +13,14 @@ class FavoriteController < ApplicationController
...
@@ -13,14 +13,14 @@ class FavoriteController < ApplicationController
@favorite
=
current_user
.
favorites
.
new
(
job_id:
params
[
:job_id
])
@favorite
=
current_user
.
favorites
.
new
(
job_id:
params
[
:job_id
])
if
@favorite
.
invalid?
if
@favorite
.
invalid?
helpers
.
render_errors
(
@favorite
)
helpers
.
render_errors
(
@favorite
)
redirect_to
root
_path
redirect_to
favorite_index
_path
end
end
respond_to
:js
if
@favorite
.
save
respond_to
:js
if
@favorite
.
save
end
end
def
destroy
def
destroy
@favorite
=
current_user
.
favorites
.
find_by
(
id:
params
[
:favorite_id
])
@favorite
=
current_user
.
favorites
.
find_by
(
id:
params
[
:favorite_id
])
return
redirect_to
root
_path
if
@favorite
.
blank?
return
redirect_to
favorite_index
_path
if
@favorite
.
blank?
respond_to
:js
if
@favorite
.
destroy
respond_to
:js
if
@favorite
.
destroy
end
end
...
...
app/controllers/sessions_controller.rb
deleted
100644 → 0
View file @
d0f4baff
# frozen_string_literal: true
class
SessionsController
<
Devise
::
SessionsController
# before_action :configure_sign_in_params, only: [:create]
# GET /resource/sign_in
# def new
# super
# end
# POST /resource/sign_in
def
create
self
.
resource
=
warden
.
authenticate!
(
auth_options
)
set_flash_message!
(
:notice
,
:signed_in
)
sign_in
(
resource_name
,
resource
)
yield
resource
if
block_given?
respond_with
resource
,
location:
stored_location_for
(
resource
)
||
root_path
end
# DELETE /resource/sign_out
# def destroy
# super
# end
# protected
# If you have extra params to permit, append them to the sanitizer.
# def configure_sign_in_params
# devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
# end
end
app/views/favorite/index.html.erb
View file @
e17efe61
...
@@ -20,20 +20,19 @@
...
@@ -20,20 +20,19 @@
</div>
</div>
<div
style=
"width: 100%; height: 55vh"
></div>
<div
style=
"width: 100%; height: 55vh"
></div>
<%
else
%>
<%
else
%>
<
div
class=
"container"
>
<
%=
form_with
url:
apply_path
,
method: :get
,
local:
true
,
skip_enforcing_utf8:
true
do
|
f
|
%
>
<
%=
form_with
url:
apply_path
,
method: :get
,
local:
true
do
|
f
|
%
>
<
div
class=
"container"
>
<div
class=
"box_scroll"
>
<div
class=
"box_scroll"
>
<%=
f
.
collection_radio_buttons
:job_id
,
@favorites
,
:id
,
:id
do
|
radio
|
%>
<%
@favorites
.
each
do
|
item
|
%>
<%=
radio
.
radio_button
(
class:
'radio_id'
)
%>
<%=
render
'job/block_job_mini'
,
data:
item
,
form:
f
%>
<%=
render
'job/block_job_mini'
,
data:
radio
.
object
%>
<%
end
%>
<%
end
%>
</div>
</div>
</div>
</div>
<div
class=
"container"
>
<div
class=
"container"
>
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"col-lg-12"
>
<div
class=
"col-lg-12"
>
<div
class=
"btn_apply_job"
>
<div
class=
"btn_apply_job
in_favorite
"
>
<%=
f
.
submit
t
(
'pages.detail.btr_text_submit_cv'
),
class:
'btn btn-apply_job
'
%>
<%=
f
.
submit
t
(
'pages.detail.btr_text_submit_cv'
),
name:
nil
,
class:
'btn btn-apply_job in_favorite
'
%>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
app/views/home/index.html.erb
View file @
e17efe61
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
<div
class=
"box_text_five_jobs"
>
<div
class=
"box_text_five_jobs"
>
<span>
<%=
t
(
'pages.index.lasted_job'
)
%>
</span>
<span>
<%=
t
(
'pages.index.lasted_job'
)
%>
</span>
</div>
</div>
<%=
render
'job/modal_login'
%>
<%=
render
partial:
'job/block_info_job'
,
collection:
@lasted_jobs
,
as: :data
%>
<%=
render
partial:
'job/block_info_job'
,
collection:
@lasted_jobs
,
as: :data
%>
<%=
render
'box_nine_city'
%>
<%=
render
'box_nine_city'
%>
<%=
render
'box_nine_industries'
%>
<%=
render
'box_nine_industries'
%>
...
...
app/views/job/_block_info_job.html.erb
View file @
e17efe61
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
<%=
render
'job/link_create'
,
job_id:
data
.
id
%>
<%=
render
'job/link_create'
,
job_id:
data
.
id
%>
<%
end
%>
<%
end
%>
<%
else
%>
<%
else
%>
<
%=
render
'job/link_create'
,
job_id:
data
.
id
%
>
<
span
class=
"link_favorite span_click_favorite"
><i
class=
"far fa-heart"
></i></span
>
<%
end
%>
<%
end
%>
</div>
</div>
</div>
</div>
...
@@ -46,7 +46,7 @@
...
@@ -46,7 +46,7 @@
<%=
render
'job/link_create'
,
job_id:
data
.
id
%>
<%=
render
'job/link_create'
,
job_id:
data
.
id
%>
<%
end
%>
<%
end
%>
<%
else
%>
<%
else
%>
<%=
render
'job/link_create'
,
job_id:
data
.
id
%
>
<span
class=
"link_favorite span_click_favorite"
><i
class=
"far fa-heart"
></i></span
>
<%
end
%>
<%
end
%>
</div>
</div>
</div>
</div>
...
...
app/views/job/_block_job_mini.html.erb
View file @
e17efe61
...
@@ -6,6 +6,7 @@
...
@@ -6,6 +6,7 @@
<div
class=
"row"
>
<div
class=
"row"
>
<div
class=
"d-none d-lg-block col-lg-1"
>
<div
class=
"d-none d-lg-block col-lg-1"
>
<div
class=
"box_radio"
>
<div
class=
"box_radio"
>
<%=
form
.
radio_button
(
:job_id
,
data
.
id
)
%>
</div>
</div>
</div>
</div>
<div
class=
"col-lg-10 col-md-11 col-sm-11"
>
<div
class=
"col-lg-10 col-md-11 col-sm-11"
>
...
@@ -27,12 +28,12 @@
...
@@ -27,12 +28,12 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"col-lg-1 col-md-1 col-sm-1"
>
<div
class=
"col-lg-1 col-md-1 col-sm-1"
>
<%=
link_to
'<i class="fas fa-trash"></i>'
.
html_safe
,
destroy_favorite_path
(
favorite_id:
data
.
favorites
.
ids
),
method: :delete
,
remote:
true
,
class:
'link_favorite in_block'
%>
<%=
link_to
'<i class="fas fa-trash"></i>'
.
html_safe
,
destroy_favorite_path
(
favorite_id:
data
.
favorites
.
ids
),
method: :delete
,
remote:
true
,
class:
'link_favorite in_block'
%>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
\ No newline at end of file
app/views/job/_link_create.html.erb
View file @
e17efe61
<%=
link_to
'<i class="far fa-heart"></i>'
.
html_safe
,
favorite_path
(
job_id:
job_id
),
method: :post
,
remote:
true
,
class:
'link_favorite'
%>
<%=
link_to
'<i class="far fa-heart"></i>'
.
html_safe
,
favorite_path
(
job_id:
job_id
),
method: :post
,
remote:
true
,
class:
'link_favorite'
%>
\ No newline at end of file
app/views/job/_link_create_favorite_in_detail.html.erb
View file @
e17efe61
<%=
link_to
t
(
'pages.index.btn_text_favorite'
),
favorite_path
(
job_id:
job_id
),
method: :post
,
remote:
true
,
class:
'btn btn-apply_job_favorite'
%>
<%=
link_to
t
(
'pages.index.btn_text_favorite'
),
favorite_path
(
job_id:
job_id
),
method: :post
,
remote:
true
,
class:
'btn btn-apply_job_favorite'
%>
\ No newline at end of file
app/views/job/_link_destroy.html.erb
View file @
e17efe61
<%=
link_to
'<i class="fas fa-heart"></i>'
.
html_safe
,
destroy_favorite_path
(
favorite_id:
favorite_id
),
method: :delete
,
remote:
true
,
class:
'link_favorite'
%>
<%=
link_to
'<i class="fas fa-heart"></i>'
.
html_safe
,
destroy_favorite_path
(
favorite_id:
favorite_id
),
method: :delete
,
remote:
true
,
class:
'link_favorite'
%>
\ No newline at end of file
app/views/job/_link_destroy_favorite_in_detail.html.erb
View file @
e17efe61
<%=
link_to
t
(
'pages.index.unfavorite'
),
destroy_favorite_path
(
favorite_id:
favorite_id
),
method: :delete
,
remote:
true
,
class:
'btn btn-apply_job_favorite unfavorite'
%>
<%=
link_to
t
(
'pages.index.unfavorite'
),
destroy_favorite_path
(
favorite_id:
favorite_id
),
method: :delete
,
remote:
true
,
class:
'btn btn-apply_job_favorite unfavorite'
%>
\ No newline at end of file
app/views/job/_modal_login.html.erb
View file @
e17efe61
...
@@ -11,7 +11,8 @@
...
@@ -11,7 +11,8 @@
<div
class=
"col-lg 12"
>
<div
class=
"col-lg 12"
>
<div
class=
"modal_login_notice_text"
>
<div
class=
"modal_login_notice_text"
>
<span>
<%=
t
(
'pages.confirm.modal_login'
).
downcase
.
capitalize
%>
</span><br>
<span>
<%=
t
(
'pages.confirm.modal_login'
).
downcase
.
capitalize
%>
</span><br>
<span><b>
<%=
link_to
t
(
'devise.title_signin'
),
new_user_session_path
,
class:
'link_ct'
%>
</b></span>
<span><b>
<%=
link_to
t
(
'devise.title_signin'
),
new_user_session_path
,
class:
'link_ct'
%>
</b></span>
|
<span><b>
<%=
link_to
t
(
'pages.index.register'
),
new_user_registration_path
,
class:
'link_ct'
%>
</b></span>
</div>
</div>
</div>
</div>
</div>
</div>
...
...
app/views/shared/_loading.html.erb
View file @
e17efe61
...
@@ -15,21 +15,22 @@
...
@@ -15,21 +15,22 @@
linear-gradient
(
to
bottom
,
rgba
(
112
,
112
,
112
,
0.486
),
rgba
(
112
,
112
,
112
,
0.486
));
linear-gradient
(
to
bottom
,
rgba
(
112
,
112
,
112
,
0.486
),
rgba
(
112
,
112
,
112
,
0.486
));
}
}
.content
{
.content
{
position
:
absolut
e
;
position
:
relativ
e
;
top
:
50%
;
top
:
50%
;
left
:
48%
;
margin
:
auto
;
width
:
60
px
;
width
:
75
px
;
height
:
60
px
;
height
:
75
px
;
border-radius
:
50%
;
border-radius
:
50%
;
border
:
4px
solid
#
f3f3f3
c0
;
border
:
4px
solid
#
d2d2d2
;
border-left
:
4px
solid
rgb
(
2
19
,
37
,
13
);
border-left
:
4px
solid
rgb
(
2
53
,
30
,
0
);
border-right
:
4px
solid
rgb
(
2
19
,
37
,
13
);
border-right
:
4px
solid
rgb
(
2
53
,
30
,
0
);
transform
:
translateX
(
-50%
)
translateY
(
-50%
);
transform
:
translateX
(
-50%
)
translateY
(
-50%
);
-webkit-animation
:
spin
2s
linear
infinite
;
-webkit-animation
:
spin
2s
linear
infinite
;
animation
:
spin
2s
linear
infinite
;
animation
:
spin
2s
linear
infinite
;
}
}
@-webkit-keyframes
spin
{
@-webkit-keyframes
spin
{
0
%
{
-webkit-transform
:
rotate
(
0deg
);
}
0
%
{
-webkit-transform
:
rotate
(
0deg
);
}
100
%
{
-webkit-transform
:
rotate
(
360deg
);
}
100
%
{
-webkit-transform
:
rotate
(
360deg
);
}
...
@@ -39,18 +40,9 @@
...
@@ -39,18 +40,9 @@
0
%
{
transform
:
rotate
(
0deg
);
}
0
%
{
transform
:
rotate
(
0deg
);
}
100
%
{
transform
:
rotate
(
360deg
);
}
100
%
{
transform
:
rotate
(
360deg
);
}
}
}
@media
only
screen
and
(
max-width
:
768px
)
{
.content
{
left
:
47%
!important
;
}
}
@media
only
screen
and
(
max-width
:
576px
)
{
.content
{
left
:
44%
!important
;
}
}
</style>
</style>
<div
class=
"box_loading"
>
<div
class=
"box_loading"
>
<div
class=
"content"
></div>
<div
class=
"
small_content
content"
></div>
</div>
</div>
config/initializers/devise.rb
View file @
e17efe61
...
@@ -25,7 +25,7 @@ Devise.setup do |config|
...
@@ -25,7 +25,7 @@ Devise.setup do |config|
# note that it will be overwritten if you use your own mailer class
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
# with default "from" parameter.
config
.
mailer_sender
=
'Hung-nt'
config
.
mailer_sender
=
'Hung-nt'
config
.
scoped_views
=
true
# Configure the class responsible to send e-mails.
# Configure the class responsible to send e-mails.
# config.mailer = 'Devise::Mailer'
# config.mailer = 'Devise::Mailer'
...
@@ -243,7 +243,7 @@ Devise.setup do |config|
...
@@ -243,7 +243,7 @@ Devise.setup do |config|
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# are using only default views.
#
config.scoped_views = false
config
.
scoped_views
=
false
# Configure the default scope given to Warden. By default it's the first
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# devise role declared in your routes (usually :user).
...
...
config/routes.rb
View file @
e17efe61
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
Rails
.
application
.
routes
.
draw
do
Rails
.
application
.
routes
.
draw
do
get
'setting'
,
to:
'users#set_lang'
,
as: :set_lang
get
'setting'
,
to:
'users#set_lang'
,
as: :set_lang
scope
'(:locale)'
,
locale:
/en|vi/
do
scope
'(:locale)'
,
locale:
/en|vi/
do
devise_for
:users
,
controllers:
{
sessions:
'sessions'
,
registrations:
'registrations'
}
devise_for
:users
,
controllers:
{
registrations:
'registrations'
}
root
'home#index'
root
'home#index'
get
'register/:code'
,
to:
'users#confirm_sign_up'
,
as: :confirm_sign_up
get
'register/:code'
,
to:
'users#confirm_sign_up'
,
as: :confirm_sign_up
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment