mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-22 14:31:26 +00:00
Add basic CW/NSFW support
This commit is contained in:
parent
0e316aabdc
commit
63343ae503
7 changed files with 185 additions and 3 deletions
|
@ -33,9 +33,11 @@ class StatusController extends Controller
|
|||
|
||||
$this->validate($request, [
|
||||
'photo' => 'required|mimes:jpeg,png,bmp,gif|max:' . config('pixelfed.max_photo_size'),
|
||||
'caption' => 'string|max:' . config('pixelfed.max_caption_length')
|
||||
'caption' => 'string|max:' . config('pixelfed.max_caption_length'),
|
||||
'cw' => 'nullable|string'
|
||||
]);
|
||||
|
||||
$cw = $request->filled('cw') && $request->cw == 'on' ? true : false;
|
||||
$monthHash = hash('sha1', date('Y') . date('m'));
|
||||
$userHash = hash('sha1', $user->id . (string) $user->created_at);
|
||||
$storagePath = "public/m/{$monthHash}/{$userHash}";
|
||||
|
@ -45,6 +47,8 @@ class StatusController extends Controller
|
|||
$status = new Status;
|
||||
$status->profile_id = $profile->id;
|
||||
$status->caption = $request->caption;
|
||||
$status->is_nsfw = $cw;
|
||||
|
||||
$status->save();
|
||||
|
||||
$media = new Media;
|
||||
|
|
BIN
public/css/app.css
vendored
BIN
public/css/app.css
vendored
Binary file not shown.
Binary file not shown.
14
resources/assets/sass/_variables.scss
vendored
14
resources/assets/sass/_variables.scss
vendored
|
@ -6,3 +6,17 @@ $body-bg: #f5f8fa;
|
|||
$font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
|
||||
$font-size-base: 0.9rem;
|
||||
$line-height-base: 1.6;
|
||||
|
||||
$font-size-lg: ($font-size-base * 1.25);
|
||||
$font-size-sm: ($font-size-base * .875);
|
||||
$input-height: 2.375rem;
|
||||
$input-height-sm: 1.9375rem;
|
||||
$input-height-lg: 3rem;
|
||||
$input-btn-focus-width: .2rem;
|
||||
$custom-control-indicator-bg: #dee2e6;
|
||||
$custom-control-indicator-disabled-bg: #e9ecef;
|
||||
$custom-control-description-disabled-color: #868e96;
|
||||
$white: white;
|
||||
$theme-colors: (
|
||||
'primary': #08d
|
||||
);
|
2
resources/assets/sass/app.scss
vendored
2
resources/assets/sass/app.scss
vendored
|
@ -14,3 +14,5 @@
|
|||
@import "components/typeahead";
|
||||
|
||||
@import "components/notifications";
|
||||
|
||||
@import "components/switch";
|
152
resources/assets/sass/components/switch.scss
vendored
Normal file
152
resources/assets/sass/components/switch.scss
vendored
Normal file
|
@ -0,0 +1,152 @@
|
|||
$switch-height: calc(#{$input-height} * .8) !default;
|
||||
$switch-height-sm: calc(#{$input-height-sm} * .8) !default;
|
||||
$switch-height-lg: calc(#{$input-height-lg} * .8) !default;
|
||||
$switch-border-radius: $switch-height !default;
|
||||
$switch-bg: $custom-control-indicator-bg !default;
|
||||
$switch-checked-bg: map-get($theme-colors, 'danger') !default;
|
||||
$switch-disabled-bg: $custom-control-indicator-disabled-bg !default;
|
||||
$switch-disabled-color: $custom-control-description-disabled-color !default;
|
||||
$switch-thumb-bg: $white !default;
|
||||
$switch-thumb-border-radius: 50% !default;
|
||||
$switch-thumb-padding: 2px !default;
|
||||
$switch-focus-box-shadow: 0 0 0 $input-btn-focus-width rgba(map-get($theme-colors, 'primary'), .25);
|
||||
$switch-transition: .2s all !default;
|
||||
|
||||
.switch {
|
||||
font-size: $font-size-base;
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
position: absolute;
|
||||
height: 1px;
|
||||
width: 1px;
|
||||
background: none;
|
||||
border: 0;
|
||||
clip: rect(0 0 0 0);
|
||||
clip-path: inset(50%);
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
|
||||
+ label {
|
||||
position: relative;
|
||||
min-width: calc(#{$switch-height} * 2);
|
||||
border-radius: $switch-border-radius;
|
||||
height: $switch-height;
|
||||
line-height: $switch-height;
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
outline: none;
|
||||
user-select: none;
|
||||
vertical-align: middle;
|
||||
text-indent: calc(calc(#{$switch-height} * 2) + .5rem);
|
||||
}
|
||||
|
||||
+ label::before,
|
||||
+ label::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: calc(#{$switch-height} * 2);
|
||||
bottom: 0;
|
||||
display: block;
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
right: 0;
|
||||
background-color: $switch-bg;
|
||||
border-radius: $switch-border-radius;
|
||||
transition: $switch-transition;
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
top: $switch-thumb-padding;
|
||||
left: $switch-thumb-padding;
|
||||
width: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height} - calc(#{$switch-thumb-padding} * 2));
|
||||
border-radius: $switch-thumb-border-radius;
|
||||
background-color: $switch-thumb-bg;
|
||||
transition: $switch-transition;
|
||||
}
|
||||
|
||||
&:checked + label::before {
|
||||
background-color: $switch-checked-bg;
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height;
|
||||
}
|
||||
|
||||
&:focus + label::before {
|
||||
outline: none;
|
||||
box-shadow: $switch-focus-box-shadow;
|
||||
}
|
||||
|
||||
&:disabled + label {
|
||||
color: $switch-disabled-color;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
&:disabled + label::before {
|
||||
background-color: $switch-disabled-bg;
|
||||
}
|
||||
}
|
||||
|
||||
// Small variation
|
||||
&.switch-sm {
|
||||
font-size: $font-size-sm;
|
||||
|
||||
input {
|
||||
+ label {
|
||||
min-width: calc(#{$switch-height-sm} * 2);
|
||||
height: $switch-height-sm;
|
||||
line-height: $switch-height-sm;
|
||||
text-indent: calc(calc(#{$switch-height-sm} * 2) + .5rem);
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
width: calc(#{$switch-height-sm} * 2);
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
width: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height-sm} - calc(#{$switch-thumb-padding} * 2));
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height-sm;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Large variation
|
||||
&.switch-lg {
|
||||
font-size: $font-size-lg;
|
||||
|
||||
input {
|
||||
+ label {
|
||||
min-width: calc(#{$switch-height-lg} * 2);
|
||||
height: $switch-height-lg;
|
||||
line-height: $switch-height-lg;
|
||||
text-indent: calc(calc(#{$switch-height-lg} * 2) + .5rem);
|
||||
}
|
||||
|
||||
+ label::before {
|
||||
width: calc(#{$switch-height-lg} * 2);
|
||||
}
|
||||
|
||||
+ label::after {
|
||||
width: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
|
||||
height: calc(#{$switch-height-lg} - calc(#{$switch-thumb-padding} * 2));
|
||||
}
|
||||
|
||||
&:checked + label::after {
|
||||
margin-left: $switch-height-lg;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+ .switch {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
|
@ -12,11 +12,21 @@
|
|||
</div>
|
||||
<div class="form-group">
|
||||
<label class="font-weight-bold text-muted small">Caption</label>
|
||||
<input type="text" class="form-control" name="caption" placeholder="Add a caption here">
|
||||
<input type="text" class="form-control" name="caption" placeholder="Add a caption here" autocomplete="off">
|
||||
<small class="form-text text-muted">
|
||||
Max length: {{config('pixelfed.max_caption_length')}} characters.
|
||||
</small>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="font-weight-bold text-muted small">CW/NSFW</label>
|
||||
<div class="switch switch-sm">
|
||||
<input type="checkbox" class="switch" id="cw-switch" name="cw">
|
||||
<label for="cw-switch" class="small font-weight-bold">(Default off)</label>
|
||||
</div>
|
||||
<small class="form-text text-muted">
|
||||
Please mark all NSFW and controversial content, as per our content policy.
|
||||
</small>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-outline-primary btn-block">Post</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue